MySQL4.1において以下のテーブルがあります


■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差し上げます
よろしくお願いします

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/06/13 14:24:43
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:irhnhhtn No.1

回答回数15ベストアンサー獲得回数0

ポイント35pt

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に書き換えました。

id:chuken_kenkou No.2

回答回数722ベストアンサー獲得回数54

ポイント300pt

こんな感じでしょう。

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
id:jayz

ありがとうございます、どんぴしゃです

2007/06/13 14:24:07

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 kn1967 2915 2772 301 2007-06-12 21:27:54
2 b-wind 3344 3206 440 2007-06-12 22:39:49

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません