- 締切済み
SQLについて
SELECT YKC.code FROM ( SELECT code,seq FROM Ctable C,Dtable D WHERE C.num = D.num AND C.DATE <= '05/01/01' ) YKC GROUP BY code,seq HAVING YKC.seq = MAX(YKC.seq) のように記述したのですが、 HAVING YKC.seq = MAX(YKC.seq)の部分が働いてくれず 複数行取ってきてしまいます。 seqがMAXの1行だけを取得したい場合、 どのようなSQLにすれば良いでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- cocomonchi
- ベストアンサー率23% (29/123)
#1です。 >HAVING YKC.seq = MAX(YKC.seq)の部分が働いてくれず 複数行取ってきてしまいます。 HAVING句とは、集計に対しての条件です。 つまり、GROUP BY code,seq の結果に対しての条件なので、 code seq 100 1 … (1) 200 2 … (2) 300 3 … (3) と出ている場合、各集計のMAX値を取得しようとしても (1)のグループのMAX(SEQ)は1ですし、 (2)のグループのMAX(SEQ)は2です。 使い方としては、 HAVING SEQ > 2 というように使います。 すると、 code seq 300 3 … (3) というような結果が得られます。 よくわかんない説明ですいません。
- cocomonchi
- ベストアンサー率23% (29/123)
カラム:CODE と SEQ が C or D のテーブルの物か分かりませんので、どちらにもあると仮定しました。 ちなみに、キー項目なども分かりませんので仮にですが SELECT C.code FROM Ctable C,Dtable D WHERE C.num = D.num AND C.DATE <= '05/01/01' AND C.SEQ = ( SELECT max(seq) FROM Ctable C,Dtable D WHERE C.num = D.num AND C.DATE <= '05/01/01' ) こんな感じでいかかでしょうか?