[英]SQLITE select by group and limit results for each group
我有以下 SQLITE 表:
COL1 | COL2 | COL3 |
---|---|---|
山雀1 | 貓1 | 時間1 |
山雀2 | 三類 | 時間2 |
山雀3 | 貓1 | 時間3 |
山雀4 | 貓1 | 時間4 |
山雀5 | 三類 | 時間5 |
tit6 | 貓2 | 時間6 |
山雀7 | 貓1 | 時間7 |
我想 SELECT 所有按 COL2、WHERE COL2 == cat1 或 cat2 分組的行,但將每個組的結果限制為最多 2 行,並按 COL3 DESC 對結果進行排序。
因此,例如,在這種情況下,我只想得到:
COL1 | COL2 | COL3 |
---|---|---|
山雀7 | 貓1 | 時間7 |
山雀4 | 貓1 | 時間4 |
tit6 | 貓2 | 時間6 |
是否可以通過(可能)一個或最多 2 個查詢來獲得此信息?
到目前為止,我嘗試了這個,但它沒有按預期工作:
SELECT * FROM "tablename" WHERE "COL2" = "cat1" OR "COL2" = "cat2" GROUP BY "COL2" ORDER BY "COL3" DESC LIMIT 2
謝謝您的幫助
過濾表並使用 ROW_NUMBER() window function:
SELECT COL1, COL2, COL3
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY COL2 ORDER BY COL3 DESC) rn
FROM tablename
)
WHERE rn <= 2
ORDER BY COL2, COL3 DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.