![](/img/trans.png)
[英]How to get first and last record of each user in MySQL (for attendance)
[英]How to get the first record of each type in sequence?
表數據:
ID | 類型 |
---|---|
1 | 一個 |
2 | 一個 |
3 | 乙 |
4 | 一個 |
5 | 一個 |
6 | 乙 |
7 | 乙 |
8 | 一個 |
9 | 一個 |
10 | 一個 |
如何僅獲取 ID 1,3,4,6,8
的行,或通過單個查詢獲取類型更改的第一條記錄?
我們在代碼中使用多個查詢和廣泛的處理來執行此操作,尤其是對於大數據,有沒有辦法在單個查詢中執行此操作?
使用LAG()
window function 為每一行獲取前一行的type
並將其與當前type
進行比較。
如果 2 個type
不同,則創建一個為true
的標志列,並使用它來過濾表:
WITH cte AS (
SELECT *, type <> LAG(type, 1, '') OVER (ORDER BY id) flag
FROM tablename
)
SELECT * FROM cte WHERE flag;
我假設列type
不包含空值( null
或空字符串)。
請參閱演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.