FireBird - 计算两个时间戳之间的小时差?

时间:2011-11-01 14:26:01

标签: php date firebird

我正在使用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是时间戳

2 个答案:

答案 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是时间戳时,这不会起作用:/