【发布时间】:2019-04-29 08:44:50
【问题描述】:
我在组合 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
但不幸的是,这不起作用。非常感谢任何帮助。
【问题讨论】:
-
unfortunately this doesn't work.它怎么不起作用?由于语法错误,您的查询不会执行?你没有得到你想要的结果?预期的结果是什么? -
为什么不直接使用
default参数?LEAD([t_stamp], 1, @ReportTimeEnd) OVER (ORDER BY [tbl_tg_machinestate_ndx])
标签: sql sql-server tsql window-functions