我發現這篇文章很有幫助:如何只為列的每個唯一值選擇第一行?
但是,它并沒有完全滿足我的要求。老實說,我認為我沒有完全理解其目的/如何使用磁區陳述句。
從這個 MS SQL 表開始,我想為每個檔案/設備組合選擇最新日期。
----------------------- ------------------------ ------------------------
| Date | File | Device |
----------------------- ------------------------ ------------------------
| 09/09/2022 | Acrobat.exe | ABC123 |
| 09/10/2022 | Acrobat.exe | DEF456 |
| 11/07/2021 | Visio.exe | ABC123 |
| 12/31/2020 | Acrobat.exe | ABC123 |
----------------------- ------------------------ ------------------------
我現在把頭繞了一會兒,我唯一能想到的是
with cte as (
SELECT Date, File, Device,
ROW_NUMBER() over (partition by Device order by File, Date DESC) as [r]
FROM MyTable
)
select Date, File, Device, from cte WHERE [r] = 1
但是,這并不總是能完全回傳我所需要的。我不太確定為什么,但我認為是因為它只考慮更改一列來增加行號的值。
uj5u.com熱心網友回復:
I'd like to select the latest date for each File/Device combination.
所以你的意思是這樣的?
select max(t.mydate) as [date],
t.myfile,
t.device
from mytable t
group by t.myfile, t.device
order by t.myfile
看到這個DBFiddle
結果是
日期 | 我的檔案 | 設備 |
---|---|---|
2022-09-09 | 雜技演員 | ABC123 |
2022-09-10 | 雜技演員 | DEF456 |
2021-11-07 | Visio.exe | ABC123 |
uj5u.com熱心網友回復:
我認為是因為它只考慮了一列的變化
對,因為這是您在over()
條款中要求的。具體來說,partition by Device
。鑒于您對“為每個檔案/設備組合選擇最新日期”的要求,您對 CTE 中 r 列的定義應如下所示:
ROW_NUMBER() over (partition by File, Device order by Date DESC) as [r]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/507796.html