一尘不染

SQL Server中具有IGNORE NULLS的Last_value

sql

我有一个带有空值的时间序列。我想将每个null值替换为最新的non-non值。根据我的研究,Oracle SQL可以使用带有IGNORE
NULLS的Last_value轻松完成此操作。是否有使用SQL Server
2016来完成此任务的类似方法?否则,我将仅使用C#对其进行编码,但是觉得使用SQL会更快,更清洁,更容易。

Sec SCORE
1   Null
2   Null
3   5
4   Null
5   8
6   7
7   Null

应替换为:

Sec SCORE
1   Null
2   Null
3   5
4   5
5   8
6   7
7   7

阅读 474

收藏
2021-05-23

共1个答案

一尘不染

您可以通过两个累积操作来执行此操作:

select t.*,
       coalesce(score, max(score) over (partition by maxid)) as newscore
from (select t.*,
             max(case when score is not null then id end) over (order by id) as maxid
      from t
     ) t;

最里面的子查询获取有值的最新ID。最外层的那个值“扩展”到随后的行。

如果您确实要更新表格,则可以轻松地将其合并到中update。但是,Oracle无法轻松做到这一点,所以我猜想这是没有必要的。

2021-05-23