2016-04-20 3 views
2

мне нужно рассчитать время перерыва, занятую работника, показан пример здесь:Вычисление разницы во времени с множественным значением в 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 

Флаг указывает IN/OUT времени 15 -> IN, 1 -> OUT

Следовательно, я не хочу первую и последнюю запись, потому что она будет рассчитана как итоговая сумма рабочих часов.

Пожалуйста, предложите, как я могу рассчитать время перерыва для каждого сотрудника.

ответ

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 

Это будет обрабатывать ситуации, когда у вас есть один и тот же флаг дважды или более в ряд правильно

+0

Впечатляет ... :) – logixologist

+0

Спасибо .. за предоставленную мне решение для этого ... – Gowthaman

+0

Как обращаться то же положение, когда флаг недоступен. – Gowthaman

Смежные вопросы