计算SQL Server中多个值的时差

时间:2016-04-20 15:21:01

标签: sql-server

我需要计算员工休息时间,此处显示的样本:

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

因此,我不想要第一个和最后一个记录,因为它将被计算为总数 工作时间。

请建议我如何计算每位员工的休息时间。

1 个答案:

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

这将处理正确连续两次或更多次相同标志的情况