我有一个包含多个字段的数据集,但我关心的主要 3 个字段是客户、名称和日期。我需要选择名称更改的行。我尝试使用 Partition By 但它对我不起作用。
客户信息表
Client Name Date
1 John 12-jun-2023
1 John 13-jun-2023
1 Mick 14-jun-2023
1 Mick 15-jun-2023
1 Paddy 16-jun-2023
2 Mary 12-jun-2023
2 Mary 13-jun-2023
2 Mary 14-jun-2023
2 Paula 15-jun-2023
2 Rita 16-jun-2023
SQL 已尝试
Select * from client_Info CI1
Inner join (select row_number() over (partition by client order by date desc) rn,
client,name,date
from Client_Info) CI2
on (CI2.client = CI1.client and
CI2.Date < CI1.Date and
CI2.Name <> CI1.Name)
Where rn = 1
Order by CI1.Date;
结果应该是:
Client Name Date
1 John 12-jun-2023
1 Mick 14-jun-2023
1 Paddy 16-jun-2023
2 Mary 12-jun-2023
2 Paula 15-jun-2023
2 Rita 16-jun-2023
ROW_NUMBER
是正确的选择,您只需要另一列来分区
WITH CTE AS (
select client,name,date
,row_number() over (partition by client,name order by date ASC) as rn
FROM Client_Info
)
SELECT client,name,date
FROM CTE
WHERE rn = 1