【问题标题】:tsql-Joining tables with group bytsql-使用 group by 连接表
【发布时间】:2012-11-15 03:05:48
【问题描述】:

有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

     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

我怎样才能达到上述结果集

【问题讨论】:

  • 嗯,不太确定你在这里给出的结果集。您说您希望 tablea student-meeting-teacher 上的 max(date) 与 tableb student-meeting-teacher 上的 max(date) 匹配。当我查看您的结果时,应该不是值 21 记录,而是值 15 记录....

标签: sql-server tsql


【解决方案1】:

首先,我很好奇为什么您在两个单独的表中拥有相同的数据,而不是通过 ID 链接它们。 IE。会议 -> 价值观

根据您的要求,这应该可以。这将查找 两个 表中存在的最新会议。

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

【讨论】:

    【解决方案2】:
    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

    抱歉,格式不好。

    【讨论】:

    • 嗨,迈克,感谢您的格式化。你能告诉粘贴后如何格式化代码吗?
    • 如果我有多个学生怎么办?它仍然返回一行
    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2022-01-23
    相关资源
    最近更新 更多