У меня проблемы с объединением функций LEAD и ISNULL. Основной запрос выглядит так:
DECLARE @ReportTimeStart DATETIME = '2019-04-25 06:50'
DECLARE @ReportTimeEnd DATETIME = '2019-04-25 23:59';
SELECT
[tbl_tg_machinestate_ndx],
[Machine_State],
[t_stamp],
LEAD([t_stamp]) OVER (ORDER BY [tbl_tg_machinestate_ndx]) NextStateTime
FROM [db_SPE_Carrig].[dbo].[tbl_TG_MachineState]
WHERE [t_stamp] BETWEEN @ReportTimeStart AND @ReportTimeEnd
Это дает мне длинный список, подобный этому:
tbl_tg_machinestate_ndx Machine_State t_stamp NextStateTime
5893 130 2019-04-25 23:44:49.160 2019-04-25 23:46:34.670
5894 170 2019-04-25 23:46:34.670 2019-04-25 23:50:01.370
5895 100 2019-04-25 23:50:01.370 NULL
Я хочу использовать функцию ISNULL (), чтобы заменить это последнее значение NULL временем окончания моего отчета. Как это:
SELECT
[tbl_tg_machinestate_ndx],
[Machine_State],
[t_stamp],
ISNULL(
(LEAD([t_stamp]) OVER (ORDER BY [tbl_tg_machinestate_ndx]) NextStateTime),
@ReportTimeEnd)
FROM [db_SPE_Carrig].[dbo].[tbl_TG_MachineState]
WHERE [t_stamp] BETWEEN @ReportTimeStart AND @ReportTimeEnd
Но, к сожалению, это не работает. Любая помощь высоко ценится.