Разница во времени между текущей записью и предыдущей записью (с переменной запаздывания и оператором case) - PullRequest
0 голосов
/ 30 января 2019

Я хочу рассчитать время между последующими записями в SQL, если записи произошли в один и тот же день.

У меня есть таблица, которая выглядит следующим образом с данными за 24 и 25 января от одного и того же оборудования:

EQUIPMENTNUMBER |TimeOfDay |Месяц |WeekNumber |День |Год
10020576 |4:18:58 |1 |4 |24 |2019
10020576 |4:57:23 |1 |4 |24 |2019
10020576 |3:22:47 |1 |4 |25 |2019
10020576 |4:19:14 |1 |4 |25 |2019

Я могу использовать переменную запаздывания в операторе case, чтобы определить, произошла ли предыдущая запись в тот же день, что и текущая запись.Используя следующий код, я получаю следующую таблицу:

SELECT  
EQUIPMENTNUMBER,   
[TimeOfDay],   
Month,  
WeekNumber,  
Day,   
Year,  
CASE  
    WHEN Day = lag(day,1,0) over (order by EQUIPMENTNUMBER, YEAR, WeekNumber,  
 DAY,timeofday) 
THEN 1 
ELSE 0   
END as [PreviousRecordOnSameDay]  
FROM [Table]

EQUIPMENTNUMBER |TimeOfDay |Месяц |WeekNumber |День |Год |PreviousRecordOnSameDay
10020576 |4:18:58 |1 |4 |24 |2019 |0
10020576 |4:57:23 |1 |4 |24 |2019 |1
10020576 |3:22:47 |1 |4 |25 |2019 |0
10020576 |4:19:14 |1 |4 |25 |2019 |1

Итак, теперь у меня есть индикатор, сообщающий, произошла ли предыдущая запись в тот же день, что и текущая.Теперь я хочу вычислить разницу во времени от предыдущей записи к текущей, если они произошли в тот же день.Я использую следующий SQL и получаю ошибку.

SELECT   
EQUIPMENTNUMBER,   
[TimeOfDay],   
Month,  
WeekNumber,  
Day,    
Year,  
CASE  
  WHEN Day = lag(day,1,0) over (order by CEID, YEAR, WeekNumber, DAY,timeofday)   
THEN
    datediff(minute, lag(timeofday,1,0) over (order by CEID, YEAR, WeekNumber, DAY,timeofday), timeofday)
    ELSE 0 
END 
FROM [Table] 

Я получаю следующую ошибку:

Msg 206, Level 16, State 2, Line 26
Operand type clash: int is incompatible with time

Может кто-нибудь там, пожалуйста, пояснить, что означает эта ошибка, или дать предложения о том, как рассчитать разницу во временной отметке между последующими записямив SQL Server?

Спасибо!

1 Ответ

0 голосов
/ 31 января 2019

lag (timeofday, 1,0) - часть, вызывающая конфликт типов.timeofday имеет тип time и по умолчанию для функции задержки используется int.они должны быть одинаковыми.либо удалите необязательное значение по умолчанию, либо измените на тип времени '00: 00: 00.000 '

LAG (scalar_expression [, offset] [, default])
OVER ([partition_by_clause] order_by_clause)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...