我正在使用FireBird开发一个关于工作时间的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
是时间戳
答案 0 :(得分:0)
可以尝试:
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类似,那么应该给你两个时间戳。
答案 1 :(得分:0)
怎么样?
SELECT DATUM, MAX(NREC), MIN(NREC)
FROM ARCHIVE
GROUP BY DATUM
可选择与正确日期范围的条件相结合?
修改强> 当然,当DATUM是时间戳时,这不会起作用:/