sql - 通过加入 2 个表来获取个人的最新记录
问题描述
我必须获取通过加入 2 个表得出的学生的最新记录:
table 1: table 2:
id name id marks EXAM attended time status
-------- ----------------------------------------------
1 ABC 1 90 2019-04-05 06:00:00 PASS
2 DEF 1 25 2018-06-05 08:00:00 FAIL
2 45 2019-03-05 06:00:00 FAIL
2 22 2019-01-05 09:00:00 FAIL
在加入两个表时,我得到了这个:
# name marks EXAM ATTENDED TIME status
------------------------------------------------------
1 ABC 90 2019-04-05 06:00:00 PASS
2 ABC 25 2018-06-05 08:00:00 FAIL
3 DEF 45 2019-03-05 06:00:00 FAIL
4 DEF 22 2019-01-05 09:00:00 FAIL
5 DEF 55 2019-04-05 09:00:00 PASS
6 DEF 66 2019-05-05 09:00:00 PASS
7 DEF 99 2018-05-05 09:00:00 PASS
我想获取有关日期时间和名称的最新结果。
我需要的输出是:
id name marks EXAM ATTENDED TIME status
------------------------------------------------------
1 ABC 90 2019-04-05 06:00:00 PASS
6 DEF 66 2019-05-05 09:00:00 PASS
解决方案
您可以使用相关子查询在下面尝试
select * from table1 a1
inner join table2 a on a1.id=a.id
where exam_attended_time in (select max(exam_attended_time) from table2 b where a.id=b.id)
row_number()
或者,如果您的数据库支持,您可以使用它-
select * from
(
select a.name,a1.*,row_number(partition by a.id order by exam_attended_time desc)rn from table1 a1
inner join table2 a on a1.id=a.id
)X where rn=1
推荐阅读
- python-3.x - 我不能用 Python3 对句子进行二元化
- apache-kafka - 消息消费者的Kafka相同消费者组以及流拓扑
- java - 无法识别的字段类未标记为可忽略
- javascript - 编辑链接 javascript:open
- flutter - Dart:如何查找两个日期之间的天数,不包括周末或谓词
- java - Textview 文本大小应为 editText 文本大小并显示在 listview 中
- c - 返回范围内的数字数组
- c++ - 是否存在保证 int 成员为零初始化的情况?
- validation - 实现验证器接口时如何访问有效负载?
- java - Chrome页面不是搜索页面后导航,使用chrome驱动程序,selenium