我不知道这是否可能,但它真的很棒。我有一个登录表,用于在不同项目上记录时间的人员,我需要编译一个给定时间段内每个项目记录的时间报告。
我的表看起来像这样:
id | project | time_in | time_out | break
----------------------------------------------------------------
1 | 1 | 2014-12-07 05:00:00 | 2014-12-07 10:00:00 | 30
2 | 2 | 2014-12-07 06:00:00 | 2014-12-07 13:00:00 | 15
3 | 1 | 2014-12-07 14:00:00 | 2014-12-07 18:00:00 | 0
4 | 3 | 2014-12-07 08:30:00 | 2014-12-07 18:45:00 | 75
5 | 2 | 2014-12-07 12:00:00 | 2014-12-07 16:30:00 | 0
我希望能够获得一个日期范围记录每个项目记录时间的报告,即每个项目记录的总时间(可能以秒为单位)。
time_in
和time_out
是TIMESTAMP
类型的字段; break
是一个整数,表示此人休息的分钟的数量。我需要为每个项目获得time_out - time_in - break
的总和,例如12月7日:
project | time
---------------
1 | 34200
2 | 40500
3 | 34200
到目前为止,这就是我的全部内容:
SELECT DISTINCT
`project`
FROM `sign_ins`
WHERE
`time_in` >= '2014-12-07 00:00:00' AND
`time_out` <= '2014-12-08 00:00:00';
感谢您对此社区的帮助。你们这么聪明。
答案 0 :(得分:2)
您可以通过将日期/时间值转换为Unix时间戳来获得以秒为单位的差异。然后,使用sum()
汇总差异:
SELECT project,
SUM(UNIX_TIMESTAMP(time_out) - UNIX_TIMESTAMP(time_in) - (break * 60)) as DiffSecs
FROM `sign_ins`
WHERE `time_in` >= '2014-12-07 00:00:00' AND
`time_out` <= '2014-12-08 00:00:00'
GROUP BY project;