次のような RESULTS というテーブルがあります。
RESULTS_IDN NAME SUBJECT YEAR QUALIFIED
1 MARK ENGLISH 1989 N
3 MARK ENGLISH 1991 N
5 MARK ENGLISH 1993 Y
7 MARK ENGLISH 1995 N
2 MARK MATH 1990 N
5 MARK MATH 1993 N
6 MARK MATH 1995 Y
4 MARK SCIENCE 1991 N
9 MARK SCIENCE 1997 Y
彼が作成した最新の試験のサブジェクトの候補者の資格ステータスを知る必要があります。このクエリ (ORACLE/MSSQL) を作成するにはどうすればよいですか?
たとえば、入力
NAME,SUBJECT OUTPUT NAME IDN SUBJECT YEAR Q
MARK,ENGLISH OUTPUT MARK 7 ENGLISH 1995 N
MARK SCIENCE OUTPUT MARK 9 SCIENCE 1997 Y
MARK MATH OUTPUT MARK 6 MATH 1995 Y
これを解決する 1 つの方法を知っています。
(SELECT NAME SUBJECT YEAR MAX(YEAR) YEAR
FROM RESULTS WHERE NAME = 'MARK' AND SUBJECT ='MATH'
GROUP BY NAME SUBJECT YEAR) LATEST
上記のテーブルを IDN で同じテーブルに結合すると、結果を取得できます。しかし、これは二重の作業です。とにかく、MAX(YEAR) をクラブして、HAVING CLAUSE などを使用して対応する年を取得できますか? GROUP BY データに対する 2 つの操作、1 つの最新の操作、および対応する Qualified ステータスが必要です。
PS: もちろん DB にはこのような 100 人の候補のレコードがあります。
更新 : この質問は、 回答 2 のようにグループあたり最大 n の問題としても分類されます。DB で分類された問題であることを知るのは興味深いことです。