簡體   English   中英

如果前一個值為null,如何獲取上一個值的下一個

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM