У меня есть две таблицы: ActiveContacts и CompletedContacts. ActiveContacts содержит контакты, которые не были закрыты, но могли появиться из контакта в CompletedContacts.
Мне нужно найти минимальный ContactStart для всех контактов в ActiveContacts, вплоть до первого связанного контакта в CompletedContacts, если таковой существует. Вы знаете, что достигли «корня», когда ContactID = MasterContactID.
Например, в моих данных образца:
From ActiveContacts
45227565918 --> 45130250258
From CompletedContacts
45130250258 --> 45065182801
45065182801 --> 45065111275
45065111275 --> 44987017334
44987017334 --> 44986804829
44986804829 --> 44986804829 --> 2019-02-25 07:48:00.00
В некоторых случаях ContactID будет существовать только в ActiveContact, поскольку он не был порожден другими контактами в CompletedContacts.
45562514264 --> 45562514264 --> 2019-03-27 02:44:00.000
Я думаю, что это может быть достигнуто с помощью рекурсивного CTE, но я не могу понять это правильно. Это возможно? Моя единственная другая идея - ситуация типа курсор за строкой.
Пример кода ниже.
CREATE TABLE CustServ.WF.ActiveContactsTest
(
ContactID [bigint],
MasterContactID [bigint],
ContactStart [datetime]
);
INSERT INTO CustServ.WF.ActiveContactsTest (ContactID, MasterContactID, ContactStart)
VALUES
(45227565918,45130250258,'3/8/19 17:29'),
(45547409273,45545833249,'3/26/19 19:44'),
(45547477525,45547474793,'3/26/19 22:45'),
(45547491195,45547491195,'3/26/19 23:27'),
(45562514264,45562514264,'3/27/19 2:44');
CREATE TABLE CustServ.WF.CompletedContactsTest
(
ContactID [bigint],
MasterContactID [bigint],
ContactStart [datetime]
);
INSERT INTO CustServ.WF.CompletedContactsTest (ContactID, MasterContactID, ContactStart)
VALUES
(45130250258,45065182801,'3/4/19 17:22'), -- From 1st row in ActiveContacts
(45065182801,45065111275,'2/28/19 14:11'),
(45065111275,44987017334,'2/28/19 13:49'),
(44987017334,44986804829,'2/25/19 9:20'),
(44986804829,44986804829,'2/25/19 7:48'),
(45545833249,45510675166,'3/26/19 9:44'), -- From 2nd row in ActiveContacts
(45510675166,44056741709,'3/25/19 9:35'),
(44056741709,45435906188,'3/21/19 18:50'),
(45435906188,45370464489,'3/20/19 17:15'),
(45370464489,45318017172,'3/18/19 15:31'),
(45318017172,45280077660,'3/14/19 13:16'),
(45280077660,45280077660,'3/12/19 13:24'),
(45547474793,45547474793,'3/26/19 22:31'); -- From 3rd row in ActiveContacts