我需要计算员工休息时间,此处显示的样本:
Userid Date_time Flag
------ --------- -----
1001 9/1/15 10:31 AM 15
1001 9/1/15 11:51 AM 1
1001 9/1/15 11:58 AM 15
1001 9/1/15 2:02 PM 1
1001 9/1/15 2:38 PM 15
1001 9/1/15 4:37 PM 1
1001 9/1/15 5:12 PM 15
1001 9/1/15 6:32 PM 1
1001 9/1/15 6:34 PM 15
1001 9/1/15 7:39 PM 1
1001 9/1/15 7:42 PM 15
1001 9/1/15 7:53 PM 1
Flag表示IN / OUT时间15 - > IN,1 - > OUT
因此,我不想要第一个和最后一个记录,因为它将被计算为总数 工作时间。
请建议我如何计算每位员工的休息时间。
答案 0 :(得分:2)
SELECT userId, SUM(DATEDIFF(minute, p_date_time, date_time))
FROM (
SELECT *,
LAG(date_time) OVER (PARTITION BY userId ORDER BY date_time) p_date_time
FROM (
SELECT *,
LAG(flag) OVER (PARTITION BY userId ORDER BY date_time) pflag
FROM mytable
) q
WHERE pflag <> flag
) q
WHERE pflag = 1 AND flag = 15
GROUP BY
userId
这将处理正确连续两次或更多次相同标志的情况