【发布时间】:2026-01-25 20:55:01
【问题描述】:
我有以下表格:
Table2
StudentNumbers ExamType
------------------------
1234 1
2343 2
3345 5
3454 1
5465 2
...
Table1
StudentNumbers ExamType ExamDate School Area Info
------------------------------------------------------------------
1234 1 0825 warren ny 0x504B03042D0
1234 1 0829 north nj 0x63D86E1FFFF
1233 2 0921 north nj 0xA001400646F
2343 1 0922 warren ny 0x01400646174
2343 1 0925 north ny 0x100100070se
...
我正在尝试编写查询以获得以下结果:
StudentNumbers ExamType ExamDate School Area Info
-----------------------------------------------------------------
1234 1 0829 north nj 0x63D86E1FFFF
2343 1 0925 north ny 0x100100070se
我写了以下查询:
Select t1.StudentNumbers, t1.ExamDate, t1.School, t1.Info, t1.ExamType
from Table1 as t1
Join(
Select ts.StudentNumbers, max(ts.ExamDate) as ExamDate
from Table2 as ts
Join Table1 as pl on
ts.StudentNumbers = pl.StudentNumbers where ts.ExamType = pl.ExamType
group by ts.StudentNumbers
) as t2 on t1.StudentNumbers = t2.StudentNumbers
and t1.ExamDate = t2.ExamDate
上面的查询有效,并给出了我想要的结果,即基于 Table2 的特定 ExamType 的 max ExamDate。但是在这种聚合方法中使用多个连接是最好的方法吗?或者有没有更清洁的选择。
【问题讨论】:
-
好吧,我想说这是
ANSI SQL方式,这很好。您可能会根据您的 dbms 找到其他选项,但是...您没有告诉我们您使用的是哪一个。 -
所以您的问题不是关于联接,而是关于“改进”/更改您的查询?
-
顺便说一句..您使用的是哪个 DBMS?
-
table2似乎没有必要,因为 table1 中也提供了相同的信息 (studentNumber/ExampType)(尽管它们在您的示例中并不真正匹配) -
您还说您想要“特定 ExamType 的最大考试日期”,但您的
max()聚合会计算最大值。考试日期每个学生不是每个考试类型。
标签: sql sql-server database sql-server-2008 join