选择distinct并获取时间戳差异的总和

时间:2014-12-08 02:38:58

标签: mysql sql datetime select distinct

我不知道这是否可能,但它真的很棒。我有一个登录表,用于在不同项目上记录时间的人员,我需要编译一个给定时间段内每个项目记录的时间报告。

我的表看起来像这样:

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_intime_outTIMESTAMP类型的字段; 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';

感谢您对此社区的帮助。你们这么聪明。

1 个答案:

答案 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;