0

2つのテーブルを持っている TableA

    StudentID   MeetingID  TeacherID   Date
     001         1002581    1056      10-12-2012
     001         1006789    1056      10-13-2012
     001         1006754    1058      10-13-1012

テーブル B をもう 1 つ用意する

     StudentID      MeetingID    TeacherID     Date        Value
         001          1002581      1056         10-12-201     15
         001          1002856      1056         10-20-2012    21

条件は、テーブル A の特定の学生教師ミーティングの max(date) が、テーブル B の同じ学生教師ミーティングの max(date) 値と一致することです。結果セットを次のように表示したい

   StudentID       MeetingID     TeacherID     Date          Value
   001             1006789       1056          10-20-2012     21

上記の結果セットを達成するにはどうすればよいですか

4

2 に答える 2

1
SELECT TOP 1 c.StudentID,c.MeetingID,c.TeacherID,c.tab1_dates,c.VALUE
FROM 
(
    SELECT a.StudentID,a.MeetingID,a.TeacherID,a.Dates AS tab1_dates,b.Dates AS tab2_dates,b.VALUE,
    ROW_NUMBER() OVER (ORDER BY a.Dates,b.Dates) AS RN1
    FROM tab2 b
    INNER JOIN
    (
      SELECT StudentID,MeetingID,TeacherID,Dates FROM tab1
    ) a
    ON b.StudentID = a.StudentID
    AND b.TeacherID = a.TeacherID
        ) c
ORDER BY RN1 DESC

--SQLフィドル-http ://www.sqlfiddle.com/#!3/c6cea /1

申し訳ありませんが、うまくフォーマットできませんでした。

于 2012-11-14T19:03:43.787 に答える
1

まず、IDを介してリンクするのではなく、2つの別々のテーブルに同じデータがあるのはなぜか知りたいです。つまり、会議->値

要件に応じて、これは機能するはずです。これにより、両方のテーブルに存在する最新の会議が検索されます。

SELECT B.* 
FROM B INNER JOIN A ON B.StudentID = A.StudentID AND B.MeetingID = A.MeetingID AND B.Date = A.Date
WHERE B.Date = (SELECT MAX(Date) FROM A WHERE A.StudentID = B.StudentID AND A.MeetingID = B.MeetingID)

これがフィドルです:http ://sqlfiddle.com/#!6 / d15ca / 4

于 2012-11-14T18:23:55.277 に答える