我有这个表:我想通过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)
???
但这不起作用?
答案 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)