這個問題在這里已經有了答案: 獲得每組的前 1 行 (20 個答案) 10 小時前關閉。
如果我有一張這樣的桌子
fid name date
---------------------
1 John1 2020-10-08
1 John2 2020-10-08
1 John3 2018-06-04
2 Tom1 2019-10-08
我想為每個fid具有最新日期的行保留行。但是,如果有多個,則只保留 1 個(任何一個都可以)。所以最終的結果應該是這樣的
fid name date
---------------------
1 John1 2020-10-08
2 Tom1 2019-10-08
有誰知道如何在 SQL Server 中做到這一點?如果重要的話,我使用 v14 (2017)。
問題是,如果我分組fid并執行Max(date),我會得到 1 條記錄fid,但是當我離開它以獲取其他列時,它會回傳 2 條記錄,因為最近的日期出現了兩次。
uj5u.com熱心網友回復:
我們可以ROW_NUMBER在這里使用可洗掉的 CTE :
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY fid ORDER BY date DESC, name) rn
FROM yourTable
)
DELETE
FROM cte
WHERE rn > 1;
上述邏輯將為rn = 1每組fid記錄分配(即備用)具有最近日期的記錄。如果兩個相同的記錄fid也有相同的最新日期,那么它會保留較早的名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331629.html
標籤:sql sql-server
上一篇:如何獲取重復的行
