2

私は3つのテーブルを持っています:

member
member_id|member_name

training_member
training_id|member_id

training
training_id|team_id|training_date

各メンバーの team_id と training_date を使用して、最新のトレーニングを見つける必要があります。メンバーがトレーニングを受けていない場合は、team_id と training_date として NULL を返す必要があります。

次のように、さまざまな方法を試しました。

SELECT m.member_id, t.team_id, MAX(t.training_date)
FROM member m
JOIN training_member tm ON m.member_id = tm.member_id
JOIN training t ON tm.training_id = t.training_id
GROUP BY m.member_id
ORDER BY m.member_name, t.training_date DESC

ただし、正しい結果は得られません。MAX(training_date) に関連付けられたものではなく、リストされた最初の team_id が返されるようです。

何を変更する必要がありますか?

編集: sqlfiddle: http://sqlfiddle.com/#!2/a1ec1/1

4

3 に答える 3

0

メンバーがトレーニングを受けていない場合LEFT JOINに戻るために使用します。null

コードは次のとおりです。

SELECT m.member_id, t.team_id, max(t.training_date)
FROM member m
LEFT  JOIN training_member tm ON m.member_id = tm.member_id
LEFT  JOIN training t ON tm.training_id = t.team_id
GROUP BY tm.member_id
ORDER BY m.member_name, t.training_date DESC

デモ: http://sqlfiddle.com/#!2/a1ec1/42

于 2013-10-23T09:54:32.473 に答える
0

これをチェックして

SELECT * FROM member LEFT JOIN 
(SELECT training.training_id,team_id,max(training_date) as training_date, 
member_id FROM training LEFT JOIN training_member ON 
training.training_id = training_member.training_id GROUP BY member_id) a 
ON member.member_id = a.member_id
于 2013-10-23T09:48:20.637 に答える