0

1 つのテーブルから最大日付を引き出​​しながら、2 つのテーブルを結合しようとしています。学生用テーブルとコミュニケーション用テーブルがあります。各生徒は生徒テーブル内で一意であり、多くのコミュニケーション エントリがあります。

各学生の ID、名前、最新の通信日、およびその日付の通信メッセージを取得する SQL スクリプトを作成したいと考えています。

max(comm_date)と を使用して各生徒の最新の日付をgroup by取得できますが、対応する通信メッセージを取得するときに混乱します (多くの重複)。

表:学生

studentid, name

表:通信

studentid, comm_date, comm_msg

結果:

student.studentid, student.name, communications.comm_date, communications.comm_msg

指定された対応する通信メッセージを取得するにはどうすればよいmax(comm_date)ですか?

4

2 に答える 2

1

これにより、必要なものが得られるはずです。ネストされたサブクエリを介してこれを行うとパフォーマンスが低下するかどうかはわかりませんが、このクリーンな構文が気に入っています。

SELECT 
   s.studentid, 
   s.name, 
   LastCommDate = MAX(c.comm_date), 
   LastCommMessage = (SELECT comm_msg FROM Communications WHERE studentid = s.studentid AND comm_date = MAX(c.comm_date))
FROM Student AS s 
INNER JOIN Communications AS c
ON s.studentid = c.studentid
GROUP BY s.studentid, s.name
于 2016-04-20T22:38:49.677 に答える