我有一个包含以下列的事件表:
- 事件 ID (PK),
- 客户端 ID,
- 事件日期,
- 经理ID,
每次创建事件时,客户端 ID 以及管理器 ID 和事件日期例如:
ManagerID EventID VolunteerID ClientID EventDate
2358 2570036 276 19204 2016-01-18 00:00:00.000
但是,随着时间的推移,协调员可能会更改经理 ID,因此我需要找到客户经理在给定时间段内更改的位置。
到目前为止,我有:
SELECT Distinct [ManagerID]
,[EventID]
,[VolunteerID]
,[ClientID]
,[EventDate]
FROM [Events]
where EventDate > '2016-01-17 00:00:00.000'
and Managerid >0
group by ClientID
,ManagerID
,ClientId
,VolunteerID
,EventID
,EventDate
order by EventDate DESC
在 SQL Server 2012+ 中,您可以使用LAG()
:
select e.*
from (select e.*,
lag(managerid) over (partition by clientid order by eventdate) as prev_managerid
from events e
) e
where prev_managerid <> managerid;
编辑:
在早期版本中,您可以使用outer apply
:
select e.*
from events e outer apply
(select top1 e2.*
from events e2
where e2.clientid = e.clientid and e2.eventdate < e.eventdate
order by e2.eventdate desc
) prev
where prev.managerid <> managerid;