Я хочу рассчитать время между последующими записями в 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?
Спасибо!