我正在尝试获取给定时间段内所有用户的总时数和总加班时间。我设法建立了一个查询,该查询将给出所需的结果,但对于仅由id决定的特定用户。
SELECT
navn AS name,
hour AS hoursTotal,
overTime as overtimeTotal
FROM (
SELECT SUM(TIMESTAMPDIFF(SECOND, starttid, sluttid)) AS hour
FROM hours
WHERE hours.user_id = 14
AND DATE(starttid) BETWEEN '2018-8-25' AND '2018-9-25'
) AS T,
(
SELECT SUM( IF( TIMESTAMPDIFF(SECOND, starttid, sluttid) >= TIME_TO_SEC('07:24:00:0000') , TIMESTAMPDIFF(SECOND, starttid, sluttid) - TIME_TO_SEC('07:24:00:0000') , 0 ) ) AS overTime
FROM hours
WHERE user_id = 14
AND DATE(starttid) BETWEEN '2018-8-25' AND '2018-9-25'
) AS O,
(
SELECT name AS navn
FROM users
WHERE users.id = 14
) AS F
这给了我
name | hoursTotal | overtimeTotal
John Doe | 245700 | 85860
John Doe具有user.id 14
我无法全力以赴,但是对于2018-8-25至2018-9-25期间的所有用户
所需结果:
name | hoursTotal | overtimeTotal
John Doe | 245700 | 85860
Jane Doe | 354664 | 78243
Tarzan | 203111 | 0
Batman | 100233 | 0
我希望有人可以在这里向正确的方向提供帮助。
答案 0 :(得分:1)
是否可能需要加和并通过join进行分组
SELECT users.name AS name,
SUM(TIMESTAMPDIFF(SECOND, starttid, sluttid)) AS hoursTotal,
SUM( IF( TIMESTAMPDIFF(SECOND, starttid, sluttid) >= TIME_TO_SEC('07:24:00:0000') , TIMESTAMPDIFF(SECOND, starttid, sluttid) - TIME_TO_SEC('07:24:00:0000') , 0 ) ) as overtimeTotal
FROM hours
INNER JOIN users on hours.user_id = users.id
WHERE DATE(starttid) BETWEEN '2018-8-25' AND '2018-9-25'
group by users.name