在空值之前返回上一个值

问题描述 投票:0回答:1

我当前正在查询缺少索引的表。

以下是一些示例数据:

id  dStartDate
126 2010-04-22 00:00:00.000
127 NULL
128 2010-04-29 00:00:00.000
129 2010-05-03 00:00:00.000
130 NULL
131 NULL
132 NULL
133 2010-04-29 00:00:00.000
134 NULL
135 NULL
136 2010-04-29 00:00:00.000
137 NULL
138 NULL
139 2010-04-29 00:00:00.000
140 NULL
141 2010-04-29 00:00:00.000
142 2010-04-29 00:00:00.000
143 NULL
144 NULL

我使用以下脚本获取缺少的索引:

declare @id int
declare @maxid int

set @id = 1
select @maxid = max(idJCMaster) from _btblJCMaster

declare @IDseq table    (id int)

while @id < @maxid --whatever you max is
begin
    insert into @IDseq values(@id)

    set @id = @id + 1
end

select 
    s.id
from        @IDseq s 
left join   _btblJCMaster t on s.id = t.idJCMaster
where t.idJCMaster is null

上面的方法很完美,但是,我想查看以前的记录(不为空)的日期,以了解何时删除该记录...

我更改了上面的脚本,使其看起来像这样:

declare @id int
declare @maxid int

set @id = 1
select @maxid = max(idJCMaster) from _btblJCMaster

declare @IDseq table    (id int)

while @id < @maxid --whatever you max is
begin
    insert into @IDseq values(@id)

    set @id = @id + 1
end

select 
    s.id
,   t.dStartDate
from        @IDseq s 
left join   _btblJCMaster t on s.id = t.idJCMaster

我得到的结果看起来像这样:

Script 2 Results

可以看出,对于那些特定的索引,有时遗失的数量多于记录...

我不太确定如何更改脚本以显示以前的日期(空值之前)。

在此示例中,我的预期结果将是:

Expected Results

请协助取得预期的结果?

非常感谢您的协助!

tsql sql-server-2017
1个回答
0
投票

我猜您这里需要一个滞后窗口功能

SELECT id, ISNULL(dStartDate, LAG(dStartDate) OVER())
FROM YOUR_TABLE;
© www.soinside.com 2019 - 2024. All rights reserved.