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 を取得するのに複雑なクエリが必要な場合、2 回記述するのは面倒です。ちなみに私は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 自体が選択である場合には、より効果的かもしれません。

于 2012-10-24T22:44:10.943 に答える
1

私が理解したことから、問題はクエリ自体ではなく、「面倒な」テーブルtab1の書き込みです。次に、あなたをお勧めし、create view tab1それを使用します。

于 2012-10-24T22:38:58.543 に答える