簡體   English   中英

SQL Server 為每個日期最高的學生獲取一行

[英]SQL Server Get one row for each student with highest date

我有兩個表如下: 在此處輸入圖片說明

我想找到 StudentId、FirstName、StudentLoginInfoId、LoginDate。 我希望每個學生只有一個具有更高 LoginDate 的條目。

預期結果:

在此處輸入圖片說明

您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM