我的数据集如下:
ID ReportingDate Status
123 05/05/2020 GREEN
123 12/05/2020 NONE
123 19/05/2020 NONE
123 26/05/2020 AMBER
123 02/06/2020 RED
123 09/06/2020 NONE
123 16/06/2020 GREEN
123 23/06/2020 NONE
123 30/06/2020 AMBER
我想忽略none状态并取previous值,它可能是前一行,但有时是前2行或前3行。基本上,最终输出应该像“final”列一样
ID ReportingDate Status FINAL
123 05/05/2020 GREEN GREEN
123 12/05/2020 NONE GREEN
123 19/05/2020 NONE GREEN
123 26/05/2020 AMBER AMBER
123 02/06/2020 RED RED
123 09/06/2020 NONE RED
123 16/06/2020 GREEN GREEN
123 23/06/2020 NONE GREEN
123 30/06/2020 AMBER AMBER
我试过使用lag()或lead()函数,但它不能按要求工作。
UPPER
(
CASE
WHEN psh.Status = 'NONE'
THEN LAG(psh.Status,1,psh.Status) OVER
(
PARTITION BY psh.ID
ORDER BY rp.ReportingDate
)
ELSE psh.Status
END
) AS OverallStatusHistory
你能告诉我,如果有办法的话,请告诉我?
非常感谢!
1条答案
按热度按时间mxg2im7a1#
您可以根据非-
'NONE'
价值观。然后传播价值:这是一把小提琴。
sql标准实际上支持
IGNORE NULLS
选项开启LAG()
(以及其他各种窗口功能)。这样就可以在没有子查询的情况下解决这个问题。不幸的是,SQLServer还不支持这个功能。