1

例如,我有

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。

4

2 回答 2

2

我原来的答案是:

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 可能会更好。

于 2012-10-24T22:44:10.943 回答
1

据我了解,问题不在于查询本身,而在于“繁琐”的写表tab1。我会建议你create view tab1,然后使用它。

于 2012-10-24T22:38:58.543 回答