У меня есть проблема, которую, я чувствую, можно решить с помощью разделов lag / lead +, но я не могу обойти ее.
Клиенты приглашаются участвовать в исследовательских проектах каждые два года (aprox.).Количество клиентов выбирается для каждого проекта.Некоторые клиенты отобраны для нескольких исследовательских проектов.Те получают приглашение.В некоторых случаях приглашение не отправляется.Если клиент не реагирует на приглашение, отправляется второе приглашение (напоминание).3-й, 4-й также возможны.
Мне нужно выяснить, было ли у клиента приглашение на предыдущий исследовательский проект.(И, опционально, какое приглашение было).
Набор данных выглядит следующим образом:
clientID | projectID | invitationID
14 | 267 | 489
14 | 267 | 325
16 | 385 | 475
17 | 546 | NULL
17 | 547 | 885
17 | 548 | 901
18 | 721 | 905
18 | 834 | 906
18 | 834 | 907
19 | 856 | 908
19 | 856 | 929
19 | 857 | 931
19 | 857 | 945
19 | 858 | NULL
Client 14 has had 2 invitations for the same research-project
Client 16 has had 1 invitation for 1 research-project
Client 17 has been selected for 3 research-projects but opted out for project 546, receiving 1 invitation each for the following projects.
Client 18 has been selected for 2 research-projects. For the second project he got a 2 invitations.
Client 19 has been selected for three research-projects. For the first two a reminder was set. Client 19 was selected for project 858 but opted out thus no invitation.
Теперь мне нужно для каждого клиента определить, было ли приглашение для предыдущего исследовательского проекта.,(И, по желанию, какое это было приглашение).Мне нужно только первое приглашение (если их было несколько).Таким образом, мой результирующий набор данных должен выглядеть следующим образом (данные в скобках необязательны):
clientID | projectID | invitationID | InvitedForPreviousProject
14 | 267 | 489 | 0
14 | 267 | 325 | 0
16 | 385 | 475 | 0
17 | 546 | NULL | 0
17 | 547 | 885 | 0
17 | 548 | 901 | 1 (885)
18 | 721 | 905 | 0
18 | 834 | 906 | 1 (905)
18 | 834 | 907 | 1 (905)
19 | 856 | 908 | 0
19 | 856 | 929 | 0
19 | 857 | 931 | 1 (908)
19 | 857 | 945 | 1 (908)
19 | 858 | NULL | 1 (931)
Можно ли это сделать с помощью LEAD, Rank, Dense-Rank?Создать заявление, включая данные ниже
declare @table table (
[clientID] [int] NULL,
[projectID] [int] NULL,
[invitationID] [int] NULL
)
INSERT @table ([clientID], [projectID], [invitationID]) VALUES
(14, 267, 489),
(14, 267, 325),
(16, 385, 475),
(17, 546, NULL),
(17, 547, 885),
(17, 548, 901),
(18, 721, 905),
(18, 834, 906),
(18, 834, 907),
(19, 856, 908),
(19, 856, 929),
(19, 857, 931),
(19, 857, 945),
(19, 858, NULL)