2016-07-12 1 views
0

У меня есть таблица событий, содержащая следующие колонки:SQL Граф Клиента, где изменился менеджер идентификатор

  • EventID (PK),
  • ClientID,
  • EVENTDATE,
  • ManagerID,

Каждый раз, когда событие создается ClientID вместе с ManagerID и EVENTDATE Так, например:

ManagerID EventID VolunteerID ClientID EventDate 
2358  2570036 276   19204  2016-01-18 00:00:00.000 

Однако с течением времени ManagerID может быть изменен координатором, поэтому мне нужно найти, где менеджер клиентов изменился в данный период.

До сих пор у меня есть:

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 
+0

Какую версию SQL Server вы используете? –

+0

2005 Я боюсь - хотя я только что обновил совместимость до 2008 года, так как он работает под управлением SQL Server 10.50.1600 – amun1000

ответ

0

В 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; 

EDIT:

В более ранних версиях, вы можете использовать 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; 
+0

Ах, извините, can not use lag - 2005 DB - но спасибо – amun1000

Смежные вопросы