【问题标题】:Calculate hour difference between two timestamps?计算两个时间戳之间的小时差?
【发布时间】:2020-12-31 21:27:14
【问题描述】:

我正在使用 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';

我将最大值和最大值都保存在一个变量中,然后选择这两个日期并计算。但这是 4 个查询。有没有更简单/更容易的方法? 另外,DATUM 是一个时间戳

【问题讨论】:

  • 我认为您的问题需要更详细地说明您究竟需要什么信息。

标签: php date firebird


【解决方案1】:

可以试试:

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 一样工作,这应该给你两个时间戳。

【讨论】:

  • 这就是问题所在 - FireBird 不像 MySQL,这就是我遇到问题的原因编辑:但这行得通,谢谢 :D
【解决方案2】:

怎么样

SELECT CAST(DATUM AS DATE), MAX(NREC), MIN(NREC)
FROM ARCHIVE
GROUP BY 1

可以选择结合正确日期范围的条件?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2016-12-17
    • 2014-05-04
    • 1970-01-01
    相关资源
    最近更新 更多