例如,我有

tab1:
att1|att2
A|3
B|4
C|3
D|4
E|1
F|2

我想要
B|4
D|4

我知道我可以用
SELECT att1 att2
FROM tab1 as T
WHERE T.att2 =
(
   SELECT MAX(att2) FROM tab1;
}

我想知道是否有更聪明的方法来做这件事。B/C如果需要复杂的查询才能得到tab1,那么写两次会很麻烦。
顺便说一下,我正在使用sqlite。

最佳答案

我最初的回答是:

SELECT att1, att2
FROM tab1
ORDER BY att2 DESC LIMIT 0,1;

我很抱歉,如果有多个记录的最大值是这样的话,那就不起作用了。下面是另一个答案:
SELECT t1.att1, t1.att2
FROM tab1 AS t1
LEFT JOIN tab1 AS t2
ON t1.att2 < t2.att2
WHERE t2.att1 IS NULL;

这个表单是否比作者提到的嵌套select更有效是个问题,但是如果tab1是select本身,它可能会更好。

07-26 08:26