Sql脚本获取两个表的值组合

时间:2013-08-26 21:00:23

标签: sql

我有两张这样的表:

    Table1
    ________
StudentNumbers  ExamType
1234        1
2343        2   
3345        5
3454        1
5465        2
...
    Table2
    ________
StudentNumbers  ExamType      ExamDate  School  Area
1234        1       0825    warren  ny
1234        1       0829    north   nj  
1233        2       0921    north   nj              
2343        1       0922    warren  ny
2343          1                  0925     north   ny
...

我需要通过使用Table1中针对特定ExamType的数据,从Table2中找出每个学生的最大ExamDate。到目前为止,我已经想出了这个,但这似乎不正确:

Select t2.StudentNumbers, t2.ExamType, max(t2.ExamDate), t2.School, t2.Area 
from Table2 as t2
Join Table1 as t1 on
t1.StudentNumbers = t2.StudentNumbers 
where t2.ExamType = 1

我在选择列表中收到错误无效,因为它不包含在聚合函数或group by子句中

它基本上应该返回:

StudentNumbers  ExamType      ExamDate  School  Area
  1234      1       0829    north   nj  
  2343          1                  0925     north   ny

3 个答案:

答案 0 :(得分:1)

使用max()或其他聚合函数时,需要对结果集中的其他字段进行分组。

Select t2.StudentNumbers, t2.ExamType, max(t2.ExamDate), t2.School, t2.Area 
from Table2 as t2
Join Table1 as t1 on
t1.StudentNumbers = t2.StudentNumbers 
where t2.ExamType = 1
group by t2.StudentNumbers, t2.ExamType, t2.School, t2.Area

这将为您提供每个学生,考试类型,学校和地区的最新考试日期。

答案 1 :(得分:0)

您需要使用GROUP BY或将聚合更改为窗口函数(例如MAX(t2.ExamDate) over (partition by t2.StudentNumbers, t2.ExamType)

BTW,正如一些评论中所提到的,考虑到第一个表中的数据包含在第二个表格中,JOIN的整个想法并没有真正有用。

答案 2 :(得分:0)

错误告诉你到底出了什么问题

  1. xxx在选择列表中无效,即选择列xxx
  2. 时出现问题
  3. 因为它不包含在内
    • 聚合函数,例如MAXSUMCOUNT
    • group by子句,例如GROUP BY xxx
  4. 因此,您必须在聚合函数中使用该列,或将该列放在GROUP BY子句中。

    鉴于您只需要“从ExamDate找到每个学生最多Table2而且ExamType已经在Table2中,那么您选择的很多列似乎没有必要加入连接,查询可以简化为

    SELECT t2.StudentNumbers
        , MAX(t2.ExamDate) AS MaxExamDate
    FROM Table2 AS t2
    WHERE t2.ExamType = 1
    GROUP BY t2.StudentNumbers