获取两个组合表的值的Sql脚本
我有两张这样的桌子:获取两个组合表的值的Sql脚本,sql,Sql,我有两张这样的桌子: Table1 ________ StudentNumbers ExamType 1234 1 2343 2 3345 5 3454 1 5465 2 ... Table2 ________ StudentNumbers ExamType ExamDate School Area 1234 1 0825 warren
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
...
我需要使用表1中特定ExamType的数据,从表2中找出每个学生的最大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
我在select列表中得到的错误无效,因为它既不包含在聚合函数中,也不包含在group by子句中
它基本上应该返回:
StudentNumbers ExamType ExamDate School Area
1234 1 0829 north nj
2343 1 0925 north ny
使用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
这将为您提供每个学生、考试类型、学校和地区的最新考试日期。使用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
这将为您提供每个学生、考试类型、学校和地区的最新考试日期。您需要使用
分组依据
或将聚合更改为窗口函数(例如MAX(t2.ExamDate)超过(按t2.studentnumber、t2.ExamType划分)
顺便说一句,正如一些评论中提到的,考虑到第一个表中的数据包含在第二个表中,
JOIN
的整个想法并不是很有用。您需要使用groupby
或将聚合更改为一个窗口函数(例如,MAX(t2.ExamDate)over(partitionbyt2.StudentNumbers,t2.ExamType)
顺便说一句,正如一些评论中提到的,考虑到第一个表中的数据包含在第二个表中,
JOIN
的整个想法并没有真正的用处。错误是告诉您到底是什么错了
xxx
在选择列表中无效,即选择列xxx
- 聚合函数,例如
,MAX
,SUM
COUNT
- 或分组依据条款,例如分组依据xxx
GROUP BY
子句中
假设您只需要“从表2
中查找每个学生的最大ExamDate
”,并且ExamType
已经在表2
中,那么您选择的许多列和联接似乎都是不必要的,查询可以简化为
SELECT t2.StudentNumbers
, MAX(t2.ExamDate) AS MaxExamDate
FROM Table2 AS t2
WHERE t2.ExamType = 1
GROUP BY t2.StudentNumbers
错误就是告诉你到底出了什么问题
xxx
在选择列表中无效,即选择列xxx
- 聚合函数,例如
,MAX
,SUM
COUNT
- 或分组依据条款,例如分组依据xxx
GROUP BY
子句中
假设您只需要“从表2
中查找每个学生的最大ExamDate
”,并且ExamType
已经在表2
中,那么您选择的许多列和联接似乎都是不必要的,查询可以简化为
SELECT t2.StudentNumbers
, MAX(t2.ExamDate) AS MaxExamDate
FROM Table2 AS t2
WHERE t2.ExamType = 1
GROUP BY t2.StudentNumbers
您将表2作为tl,然后将其属性引用为t2.attributeName。@johnheridan-抱歉,发布得太急了。我现在更新了查询。想知道stackoverflow的人是否想到了“homeworkoverflow”?选择t2.studentNumber,t2.ExamType,max(t2.ExamDate),t2.学校,t2.表2中的区域为t2,表2为t1,其中t1.studentnumber=t2.studentnumber和t1.ExamType=t2.ExamType和t2.ExamType=1(另外,由于Table2重复了Table1的字段,因此在查询中使用Table1没有多大意义。@johnheridan-我需要精确的行。如果我删除max函数,查询就会工作。但我需要使用max函数。您将Table2作为tl,然后继续引用其属性t2.attributeName。@johnheridan-抱歉,发布得太匆忙了。我现在更新了查询。想知道stackoverflow的人是否想到了“家庭作业流程”?选择t2.studentNumber、t2.ExamType、max(t2.ExamDate)、t2.School、t2。表2中的区域为t2,表2中的区域为t1,其中t1.studentNumber=t2.studentNumber和t1.ExamType=t2.ExamType和t2.ExamType=1(另外,由于Table2重复了Table1的字段,因此在查询中使用Table1没有多大意义。@johnheridan-我需要精确的行。如果我删除max函数,查询可以工作。但是我需要使用max函数。谢谢,这是一个工作,但这是一个正确的方法吗?对所有4个变量使用group by可以吗?这取决于情况。是否要使用group by所有四个?如果您按学生编号和考试类型分组,它将为您提供这两个变量的每个不同变化的最后日期,而不考虑学校或地区。这完全取决于您要查找的内容。请注意,除非您按学校和地区分组,否则您无法在查询中返回学校和地区。此外,我还要补充一点,我已经写了按十几个字段分组的十个查询。让数据库引擎为您处理效率。只需根据您需要的逻辑编写代码。我必须按所有四个字段分组。因为如果使用group by 1或group by 2,它仍然会给我带来聚合错误。是的,完全正确。结果集中不能有a)未按分组的字段,或b)不是在一个集合中,这项工作,但它是一个正确的方法吗?可以对所有4个变量使用分组方式吗?这取决于。你想将所有4个变量分组吗?如果你按学生人数和考试类型分组,它将为你提供这两个变量的每个不同变量的最后日期,而不考虑学校或地区。这完全取决于什么请注意,除非按学校和地区分组,否则无法在查询中返回学校和地区。此外,我要补充的是,我编写的查询已按十几个字段分组。让数据库引擎为您处理效率。只需编写所需逻辑的代码。我必须按所有四个字段分组。Becau