2015-06-24 47 views
1

鑑於表:選擇類型的所有記錄 'X' 是最高的 '版本'

Agreement: 
    id: int 
    type: string 
    version: int 

鑑於記錄,如:

1 | Terms | 1 
2 | Terms | 2 
3 | Privacy | 1 

我想輸出的查詢:

2 | Terms | 2 
3 | Privacy | 1 

我已經嘗試了所有方式的獨特和自我連接到最大(版本),我似乎無法破解它。

+0

爲什麼所有的行都有相同的ID? – Mureinik

+0

我打字的速度很快.. :) – Prescott

回答

3

最簡單的事情很可能會使用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 
2

它應該工作:

select max(id) , type , max(version) from Agreement 
group by type 
+0

這似乎沒有過濾所有的行 – Prescott

+3

這將與OP的原始數據一起使用,但在所有行上都有相同的ID,結果是錯字 - 請參閱評論在這個問題上。隨着更新的數據,這個迴應不再是正確的。 – Mureinik

+0

道歉,這是我的不好:( – Prescott

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

Demo here

0

PostgreSQL的:

SELECT * FROM協議一個其中id中(從協議b。選擇所需id其中按id DESC LIMIT a.type = b.type順序1)

結果:

2 |條款| 2

3 |隱私| 1