我有两张这样的表:
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
答案 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)
。
JOIN
的整个想法并没有真正有用。
答案 2 :(得分:0)
错误告诉你到底出了什么问题
xxx
在选择列表中无效,即选择列xxx
MAX
,SUM
,COUNT
GROUP BY xxx
因此,您必须在聚合函数中使用该列,或将该列放在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