表資料:
| ID | 型別 |
|---|---|
| 1 | 一個 |
| 2 | 一個 |
| 3 | 乙 |
| 4 | 一個 |
| 5 | 一個 |
| 6 | 乙 |
| 7 | 乙 |
| 8 | 一個 |
| 9 | 一個 |
| 10 | 一個 |
如何僅獲取具有 ID 的行1,3,4,6,8,或通過單個查詢獲取型別更改的第一條記錄?
我們在代碼中使用多個查詢和廣泛的處理來執行此操作,尤其是對于大資料,有沒有辦法在單個查詢中執行此操作?
uj5u.com熱心網友回復:
使用LAG()視窗函式獲取前一行的每一行type并將其與當前行進行比較type。
創建一個標志列,true如果 2type不同,并使用它來過濾表:
WITH cte AS (
SELECT *, type <> LAG(type, 1, '') OVER (ORDER BY id) flag
FROM tablename
)
SELECT * FROM cte WHERE flag;
我假設該列type不包含空值(nulls 或空字串)。
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/504985.html
