[英]SQL Server Get one row for each student with highest date
您可以使用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
的行)將包含該學生的最高登錄日期值。
您可以使用“CROSS APPLY”來查找您想要的內容:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.