2011-04-29 131 views
0

我有這個表:我想通過UIDSQL查詢只選擇最大項目?

ID | VID | UID 
1 | 1 | 5 
1 | 1 | 6 
1 | 2 | 6 
2 | 3 | 5 
2 | 3 | 6 
2 | 4 | 6 

我想這個結果落得搜索:

ID | VID | UID 
1 | 2 | 6 
2 | 4 | 6 

換句話說,只能選擇其中的VID是MAX的條目UID但保持最小NID可能不同。我想這樣的事情:

select * from TABLE where uid = 6 and max(vid) 

???

但這不起作用?

回答

3

一種方法是按降序排列值(因此最大值在頂部),然後選擇第一個結果。

SELECT t.ID, 
     t.VID, 
     t.UID 
FROM table t 
WHERE t.ID = 1 
ORDER BY t.VID DESC 
LIMIT 1 

或者你的意思是你想所有行,其中t.VID是最高的價值?在這種情況下,你可以做這樣的事情,

SELECT t.ID, 
     t.VID, 
     t.UID 
FROM table t 
WHERE t.ID = 1 
     AND t.VID = (SELECT MAX(VID) FROM table); 

編輯:基於編輯你的問題,它看起來像你只是想爲每個ID最大VID價值?如果我正確地理解你,那麼這應該給你你需要的東西。

SELECT t.ID, 
     max(t.VID) as VID, 
     t.UID 
FROM table t 
WHERE t.UID = 6 
GROUP BY t.ID 
+0

請參閱我所做的更改。 – coderama 2011-04-29 18:52:19

+0

根據您的更改進行更新。儘管如此,我可能誤解了你的想法。 – 2011-04-29 18:53:12

1

您需要有一個子查詢。這應該工作:

select * from TABLE where ID='1' AND VID=(select max(VID) from TABLE) 
+0

這是正確的道路,但我正在編輯問題,因爲這不能解決所有情況。 – coderama 2011-04-29 18:39:20

0

我希望你的現實生活中的例子更復雜(至少有更多的數據)。

此查詢會給你你想要的行。

SELECT ID,VID,UID FROM TABLE 其中id = 1 和VID中(從表中選擇最大值(VID)其中id = 1)

+0

我不會總是隻想要一個條目。我修改了這個問題。有時它可能是幾個不同的ID與不同的ID。 – coderama 2011-04-29 18:44:20