我正在做一个PHP项目与火鸟,关于工作时间。基本上,每个工人都有一张卡,进出大楼时都要在卡上盖章。每个戳记都记录在ARCHIVE
表中,包含日期(DATUM
)、id (NREC
)和user_id (NCODE
)。我要做的就是得到每天的最后一次和第一次,然后计算小时数。因此,为了得到第一个和最后一个,我使用了这个:
SELECT MAX(NREC)
FROM ARCHIVE
WHERE DATUM BETWEEN '$day.$month.$year' AND '$day+1.$month.$year';
SELECT MIN(NREC)
FROM ARCHIVE
WHERE DATUM BETWEEN '$day.$month.$year' AND '$day+1.$month.$year';
我将max和max保存在一个变量中,然后选择两个日期并进行计算。但这是4个查询。有更简单的方法吗?另外,DATUM
是一个时间戳
Could try:
SELECT DATUM FROM ARCHIVE JOIN (
SELECT MIN(NREC) AS minid, MAX(NREC) as maxid FROM ARCHIVE
WHERE DATUM DATUM BETWEEN '$day.$month.$year' AND '$day+1.$month.$year'
AND NCODE = user_id)
as mm ON mm.maxid = ARCHIVE.NREC OR mm.minid=ARCHIVE.NREC
如果Firebird像MySQL一样工作,这应该会给你两个时间戳
SELECT CAST(DATUM AS DATE), MAX(NREC), MIN(NREC)
FROM ARCHIVE
GROUP BY 1
可选地与正确日期范围的条件组合?