SQL 服务器 - 管理器 ID 已更改的客户端的 SQL 计数



我有一个包含以下列的事件表:

  • 事件 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;

最新更新