Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取两个组合表的值的Sql脚本_Sql - Fatal编程技术网

获取两个组合表的值的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