答案 0 :(得分:0)
您可以使用ROW_NUMBER
对子查询中每个分区(此处为每个学生)的结果集的输出编号,并通过将分配给每个学生的编号为1的条件来实现所需的输出将等于一行。
select studentid, firstname, studentlogininfoid, logindate
from (
select
s.studentid, s.firstname, sl.studentlogininfoid, sl.logindate,
row_number() over (partition by sl.studentid order by sl.logindate desc) as rn
from student s
inner join studentlogininfoid sl on s.studentid = sl.studentid
) t
where rn = 1
解释row_number
的参数:
PARTITION BY
指定您要分别枚举的组(每个组从1开始)ORDER BY
指定应如何枚举行(基于顺序)如果我们枚举每个学生的行并从最近的日期开始对其进行排序,则每个学生的第一行(带有rn = 1
的行)将包含该学生的最高登录日期值。
答案 1 :(得分:0)
您可以使用“交叉申请”找到所需内容:
SELECT S.StudentId
, S.FirstName
, SLI.StudentLoginInfoId
, SLI.LoginDate
FROM Student S
CROSS APPLY (SELECT TOP 1 * FROM StudentLoginInfo SLI WHERE S.StudentId = SLI.StudentId ORDER BY LoginDate DESC) SLI