首页 > 解决方案 > 通过加入 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

标签: sqlgreatest-n-per-group

解决方案


您可以使用相关子查询在下面尝试

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

推荐阅读