2015-03-18 69 views
0

所以......我有一個像這樣的表:
SQL涉及兩個柱的側向承載力MAX和GROUP BY

id group number year 
1 1  1  2000 
2 1  2  2000 
3 1  1  2001 
4 2  1  2000 
5 2  2  2000 
6 2  1  2001 
7 2  2  2001 
8 2  3  2001 

,我需要選擇較大的一年中較大的那個數爲每個組。所以我期待爲例的結果是:

3 1  1  2001 
8 2  3  2001 

任何ideias? OBS:使用Postgres

回答

2
SELECT * 
FROM (
    SELECT *, 
    row_number() over (partition by "group" order by "year" desc, "number" desc) x 
    FROM table1 
) x 
WHERE x = 1; 

演示:http://sqlfiddle.com/#!15/cd78e/2

+0

這是作用似乎正常工作。但是我使用HQL,並且只能在「SELECT」或「WHERE」中使用「FROM ....」中的子查詢。 :/ – 2015-03-19 18:43:50

+0

您可以使用此查詢在數據庫中創建視圖,而在HQL中,您可以只使用:'select * from view_name' – krokodilko 2015-03-20 07:13:44

2

如果只是某些特定的行,您可以使用DISTINCT。如果你想在同一行不同的最大值,您可以使用GROUP BY

SELECT DISTINCT ON ("group") * FROM tbl 
    ORDER BY "group", year DESC, id DESC;