[英]How to get the next next to last value if previous value is null
我正在嘗試清理一個表,該表基本上會填充第一個非空值中的所有空值。
樣本表:
ID Number Type
1 51280 %
1 A
2 51279 %
2 B
3 50631 %
3 A
3 B
3 C
始終為類型'%'填充一個數字,如果還有其他類型,則記錄為空。 我需要填寫類型'%'中的所有空行。
決賽桌應該像這樣:
ID Number Type
1 51280 %
1 51280 A
2 51279 %
2 51279 B
3 50631 %
3 50631 A
3 50631 B
3 50631 C
我嘗試在SQL Server中使用滯后函數。
select ID, number, type,
case when number is not null then number
else lag(number) over (order by id) end as new_number
from tbl
order by ID;
它對於“%”類型之外僅具有1種類型的記錄都適用。 對於具有多種類型的記錄(例如ID 3),將僅填充1條記錄。 我知道,由於lag()僅采用先前的值,因此ID 3的類型'B'將僅從類型'A'中獲取數字值,而類型'A'的值為null。
附上我的代碼的示例結果。
Number Type New_number ID
50201 % 50201 22
NULL COMP 50201 22
50668 % 50668 22
NULL COMP 50668 22
50617 % 50617 22
NULL COMP 50617 22
196794 % 196794 22
NULL COMP 196794 22
1 % 1 22
NULL XO 1 22
NULL COMP NULL 22
如您所見,最后一條記錄為空,但應改為1。
我也嘗試使用Max()不帶條件的情況,但結果只包含該特定ID中的最大數字。
Number Type new_number ID
50201 % 51827 22
NULL COMP 51827 22
50668 % 51827 22
NULL COMP 51827 22
50617 % 51827 22
NULL COMP 51827 22
196794 % 51827 22
NULL COMP 51827 22
1 % 51827 22
NULL XO 51827 22
NULL COMP 51827 22
有沒有一種方法可以跳過所有空值,而僅按類型'%'組獲取前1個值?
您不需要lag()
。 只需使用max()
:
select ID, number, type,
max(number) over (partition by id) as new_number
from tbl
order by ID;
只填充一個值,因此您甚至不需要NOT NULL
比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.