Agreement:
id: int
type: string
version: int
鑑於記錄,如:
1 | Terms | 1
2 | Terms | 2
3 | Privacy | 1
我想輸出的查詢:
2 | Terms | 2
3 | Privacy | 1
我已經嘗試了所有方式的獨特和自我連接到最大(版本),我似乎無法破解它。
Agreement:
id: int
type: string
version: int
鑑於記錄,如:
1 | Terms | 1
2 | Terms | 2
3 | Privacy | 1
我想輸出的查詢:
2 | Terms | 2
3 | Privacy | 1
我已經嘗試了所有方式的獨特和自我連接到最大(版本),我似乎無法破解它。
最簡單的事情很可能會使用rank
窗函數:
SELECT id, type, version
FROM (SELECT id, type, version,
RANK() OVER (PARTITION BY type ORDER BY version DESC) AS rk
FROM agreement) t
WHERE rk = 1
試試這個:
SELECT a.id, a.type, a.version
FROM Agreement AS a
INNER JOIN (SELECT type, MAX(version) AS maxV
FROM Agreement
GROUP BY type) t
ON t.type = a.type AND a.version = t.maxV
此查詢使用派生表,每type
包含MAX(version)
。加入這個派生表,我們可以得到原始表的所有行,其最大版本爲type
。
PostgreSQL的:
SELECT * FROM協議一個其中id中(從協議b。選擇所需id其中按id DESC LIMIT a.type = b.type順序1)
結果:
2 |條款| 2
3 |隱私| 1
爲什麼所有的行都有相同的ID? – Mureinik
我打字的速度很快.. :) – Prescott