2014-01-14 27 views
1

假設我們有這樣的表:SQL選擇不同的只是最高值

table

我只應該選擇具有最高的一次獨特的計劃,也能夠選擇其他列。爲了ilustrate這裏有一個查詢(女巫顯然是行不通的):

SELECT DISTINCT(plan), time, id 
FROM table 
ORDER BY time desc 

我怎樣才能得到這樣的表:

plan|time|id 
----+----+-------- 
1 |0 |9 
2 |90 |10 
3 |180 |11 
4 |360 |12 
5 |720 |13 
6 |1080|15 
7 |0 |16 
8 |720 |23 
+0

最高時的每計劃獨特之處?在找到兩個最高時間時應選擇哪一行?如果您希望連續選擇更多數據,這一點非常重要。 –

+0

@KubaWyrostek你可以在表格中看到高時間並不是唯一的每個計劃,請參閱計劃ID 7 – Benedictus

+1

然後,您需要另一個條件來區分這些行(即'min(id)')。 –

回答

-4

SELECT計劃,MAX(時間),ID 從演示組由計劃

check fiddle

+2

刪除冗餘括號。 'DISTINCT'是**不是**的功能。 –

+0

除此之外,這個查詢是錯誤的 - 如果啓用了ONLY_FULL_GROUP_BY,則甚至是非法的。 –

+0

有什麼不對?我認爲它在沒有DISTINCT的情況下工作,這裏是否需要? – Benedictus

4

這聽起來像一個簡單的彙總查詢:

SELECT plan, MAX(time) 
FROM  mytable 
GROUP BY plan 
+0

這是好的,但我應該怎麼做,如果我想選擇更多專欄? – Benedictus

+0

這取決於,例如GROUP BY子句刪除基於條件的重複結果...您要求的唯一性 – linuxatico

2

如果最高的時間爲每一個計劃唯一的,您需要選擇更多的列,然後自連接應該做

select mytable.* from 
mytable 
inner join 
    (
    select plan, max(time) as maxtime 
    from mytable 
    group by plan 
) as maxtimes 
    on mytable.plan = maxtimes.plan and mytable.time = maxtimes.maxtime 
+0

不起作用。有些行具有相同的計劃ID和相同的時間,所以它們被複制 – Benedictus

+0

流,是的,你寫道,對不起 – Benedictus