У меня есть таблица SQL, которая содержит employeeid, StartDateTime и EndDatetime следующим образом:
CREATE TABLE Sample
(
SNO INT,
EmployeeID NVARCHAR(10),
StartDateTime DATE,
EndDateTime DATE
)
INSERT INTO Sample
VALUES
( 1, 'xyz', '2018-01-01', '2018-01-02' ),
( 2, 'xyz', '2018-01-03', '2018-01-05' ),
( 3, 'xyz', '2018-01-06', '2018-02-01' ),
( 4, 'xyz', '2018-02-15', '2018-03-15' ),
( 5, 'xyz', '2018-03-16', '2018-03-19' ),
( 6, 'abc', '2018-01-16', '2018-02-25' ),
( 7, 'abc', '2018-03-08', '2018-03-19' ),
( 8, 'abc', '2018-02-26', '2018-03-01' )
Я хочу, чтобы результат отображался как
EmployeeID | StartDateTime | EndDateTime
------------+-----------------+---------------
xyz | 2018-01-01 | 2018-02-01
xyz | 2018-02-15 | 2018-03-19
abc | 2018-01-16 | 2018-03-01
abc | 2018-03-08 | 2018-03-19
По сути, я хочу рекурсивнопросмотреть записи о каждом сотруднике, определить дату непрерывности начальных и конечных дат и создать набор непрерывных записей о дате.
Я написал свой запрос следующим образом:
SELECT *
FROM dbo.TestTable T1
LEFT JOIN dbo.TestTable t2 ON t2.EmpId = T1.EmpId
WHERE t1.EndDate = DATEADD(DAY, -1, T2.startdate)
, чтобы узнать, смогу ли ярасшифровать что-то из вывода в поисках шаблонаПозже я понял, что с помощью описанного выше подхода мне нужно несколько раз присоединиться к одной и той же таблице, чтобы получить желаемый результат.
Кроме того, есть случай, когда может быть несколько записей о сотрудниках, поэтому мне нужно руководство по эффективномуспособ получить желаемый результат.
Любая помощь с благодарностью.