■docテーブル
doc_id | doc_name
-----------------
1 | name1
2 | name2
3 | name3
4 | name4
5 | name5
6 | name6
7 | name7
■authテーブル
user_id | doc_id | date
----------------------------
1 | 1 | 2006-4-4
1 | 2 | 2006-4-4
1 | 1 | 2005-2-4
2 | 1 | 2007-11-3
上記2つのテーブルを結合し
①user_id が"1"の行であること。
②同一ユーザーで同じ doc_id を持つ行がある場合は日付が新しい方を取り出すことと。
③doc_idは1~7まで表示(登録されているdoc_idはすべて表示する)。
上記の条件を満たし以下のような結果を得たいのですがどようようなSQL文を発行すればよいでしょうか
doc_id | date
-------------------
1 | 2006-4-4
2 | 2006-4-4
3 |
4 |
5 |
6 |
7 |
一番参考になる回答をいただけた方に300P差し上げます
よろしくお願いします
SELECT doc.doc_id, subQuery.max_date
FROM doc LEFT JOIN (SELECT Max(auth.date) AS max_date, auth.doc_id
FROM auth
WHERE auth.user_id =1
GROUP BY auth.doc_id) as subQuery
ON doc.doc_id = subQuery.doc_id
ORDER BY doc.doc_id;
※1 上記SQLServerで検証したものです、MySQLだと方言がでるかもしれません。
※2 型はdoc_idは数値、dateは日付、その他は文字列としています。
※3 dateはSQLServerでは予約語なので、項目名変えて実行した後、dateに書き換えました。
こんな感じでしょう。
select x.doc_id,max(y.date) as date from doc as x left join auth as y on x.doc_id=y.doc_id and y.user_id=1 group by x.doc_id
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | kn1967 | 2915回 | 2772回 | 301回 | 2007-06-12 21:27:54 |
2 | b-wind | 3344回 | 3206回 | 440回 | 2007-06-12 22:39:49 |
ありがとうございます、どんぴしゃです