- ベストアンサー
複雑なSELECT文について
ID 名前 日付 点数 合格日 ------------------------------------------------------------------- 1 太郎 2007/4/1 80 合格 2 太郎 2007/4/2 90 合格 3 太郎 2007/4/3 100 合格 4 花子 2007/4/5 20 不合格 5 太郎 2007/4/5 30 不合格 6 花子 2007/4/6 100 合格 7 太郎 2007/4/7 40 不合格 8 花子 2007/4/7 100 合格 上のようなテーブルから、太郎と花子が最初に合格した日の情報を 取得するようなSELECT文は可能でしょうか? 結果として望むのは以下になります。 ID 名前 日付 点数 合格日 --------------------------------------------------------------------- 1 太郎 2007/4/1 80 合格 6 花子 2007/4/6 100 合格 どなたかご教授願います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
列[合格日]を[結果]と変更していますが・・・。 SELECT 名前, MIN(日付) AS 初合格日 FROM 試験履歴 WHERE 結果=1 GROUP BY 名前; 花子, 2007/04/06 太郎, 2007/04/01 SELECT A.* FROM 試験履歴 AS A, (SELECT 名前, MIN(日付) AS 初合格日 FROM 試験履歴 WHERE 結果=1 GROUP BY 名前) AS B WHERE A.名前=B.名前 AND A.日付=B.初合格日 ORDER BY A.ID; 1, 太郎, 2007/04/01, _80, Yes 6, 花子, 2007/04/06, 100, Yes いずれにしろ、同姓同名問題は残ります。 受験者の一意に特定する列が無いので仕方ないかと思います。
その他の回答 (3)
ANo.2は無視してください。点数を考慮していませんでした。 ANo.1のSQLの最後に and 合格日 = '合格'; がいるような?
お礼
回答ありがとうございました。
select 名前,min(日付) from 試験 where 合格日='合格' group by 名前; では?
- hakugen
- ベストアンサー率36% (8/22)
このような感じで如何でしょうか。(テーブル名は勝手に”試験”としました。) SELECT * FROM 試験 A WHERE 日付 = (SELECT MIN(日付) FROM 試験 B WHERE A.名前 = B.名前 AND 合格日 = '合格') ただし、同じ日に同じ名前の人が合格していると結果に同じ人が2行出てきますが。もしこれが問題でしたらもう一工夫必要ですね。
お礼
回答ありがとうございました。
お礼
回答ありがとうございました。
補足
回答して頂いた内容で、 希望通りの結果を出すことが出来ました。 本当にありがとうございました。