【发布时间】:2015-02-12 22:45:14
【问题描述】:
我有一个员工登录表,我正在尝试为员工生成他本周每天工作小时数的摘要。
我的桌子看起来像这样:
id | user | time_in | time_out | break
-------------------------------------------------------------
1 | 6 | 2014-12-14 05:00:00 | 2014-12-14 07:00:00 | 15
2 | 6 | 2014-12-14 09:00:00 | 2014-12-14 14:00:00 | 30
3 | 6 | 2014-12-14 14:00:00 | 2014-12-14 20:00:00 | 0
4 | 6 | 2014-12-15 08:00:00 | 2014-12-15 11:00:00 | 15
break 的值以分钟为单位,因此我通过time_out - time_in - 60 * break 计算员工当天的小时数。 time_in 和 time_out 值的类型为 TIMESTAMP。
这是我目前的查询。它似乎为day 返回null,我不知道为什么。
SELECT
SUM(UNIX_TIMESTAMP(`time_out`) - UNIX_TIMESTAMP(`time_in`) - (`break` * 60)) AS `time`,
DATE_FORMAT(FROM_UNIXTIME(`time_in`), "%Y-%m-%d") AS `day`
FROM `sign_ins`
WHERE
`time_in` >= "2014-11-30 00:00:00" AND
`time_out` <= "2014-12-07 00:00:00" AND
`user` = 6
GROUP BY `day`
ORDER BY `day` ASC;
【问题讨论】:
-
你为什么要为日期时间格式
DATE_FORMAT(FROM_UNIXTIME(time_in), "%Y-%m-%d") AS day的日期值做from_unixtime()? -
我应该提到它们实际上是
TIMESTAMP类型。据我了解,这是转换它们并去掉时间值的唯一方法,以便我可以使用GROUP按星期几将它们组合在一起。
标签: mysql sql select timestamp