SQL查询只选择最大项?

时间:2011-04-29 18:23:27

标签: php mysql

我有这个表:我想通过UID搜索

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为UID的条目,但保持最小NID可能不同。我想这样的事情是这样的:

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

???

但这不起作用?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你需要有一个子查询。这应该有效:

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

答案 2 :(得分:0)

我希望你的现实生活中的例子更复杂(至少有更多数据)。

此查询将为您提供所需的行。

SELECT id,vid,uid FROM TABLE 其中id = 1 和vid in(从TABLE中选择max(vid),其中id = 1)