我有表格 - 發票,具有這樣的結構:
| ID | 發票號碼 | 日期 |
|---|---|---|
| 1 | 10 | 11-12-21 |
| 2 | 20 | 12-12-21 |
| 3 | 30 | 13-12-21 |
| 4 | 40 | 空值 |
| 5 | 50 | 14-12-21 |
| 6 | 60 | 空值 |
| 7 | 70 | 空值 |
| 8 | 80 | 15-12-21 |
我需要做什么 - 我需要找到 InvoiceNo's,其下一行或上一行的日期欄位包含空值。因此,根據提供的資料 - 我應該收到:
| 發票號碼 |
|---|
| 30 |
| 50 |
| 80 |
但是如何做到這一點呢?我找到的一個選項 -LAG()和LEAD()函式,使用這些函式我可以接收數字和日期,但不能使用引數 - 所以不能提供“日期不為空”檢查。
uj5u.com熱心網友回復:
您可以使用lag和lead來查找上一行和下一行,然后用另一個查詢包裝查詢,該查詢僅回傳其中一個所在的行null。請注意,lag第一行和lead最后一個原始資料將null默認回傳,因此您需要明確宣告非null默認值,例如getdate():
SELECT InvoiceNo
FROM (SELECT InvoiceNo,
LAG(Date, 1, GETDATE()) OVER (ORDER BY InvoiceNo) AS lag_date,
LEAD(Date, 1, GETDATE()) OVER (ORDER BY InvoiceNo) AS lead_date
FROM invoices) t
WHERE lag_date IS NULL OR lead_date IS NULL
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/389550.html
標籤:sql sql-server 查询语句 落后 带领
上一篇:回傳每個單元格的第一個元素
