CTE 및 ROW_NUMBER()
에 대한 액세스 권한이 있다고 가정합니다.
먼저 날짜의 정렬 된 목록이 필요합니다. 즉, 두 개의 기둥이 아니라 하나입니다. 그런 다음 한 날짜를 바로 다음 날짜로 간단하게 비교할 수 있습니다.
두 개의 열에 데이터가 있으므로이 하나의 정렬 된 목록을 만드는 것이 상대적으로 비용이 많이 듭니다. 나는 당신이 거대한 양의 데이터를 가지고 있지 않기를 바랍니다.
WITH
all_dates
AS
(
SELECT EnrolmentDate AS event_date FROM yourTable GROUP BY EnrolmentDate
UNION
SELECT CompletionDate AS event_date FROM yourTable GROUP BY CompletionDate
)
,
sequenced_dates
AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY event_date) AS id,
event_date
FROM
all_dates
)
SELECT
MAX(DATEDIFF(DAY, first_event.event_date, second_event.event_date)) AS duration
FROM
sequenced_dates AS first_event
INNER JOIN
sequenced_dates AS second_event
ON first_event.id = second_event.id - 1
이 숙제가 있습니까? 그렇다면 태그를 붙이십시오. – SWeko
이전에 물어 본 : http://stackoverflow.com/questions/1315262/sql-finding-longest-date-gap – Brian
@Brian, 상당히 똑같은 것은 아닙니다. 그 사람은 가장 긴 간격이 시작되는 ID를 찾고 있습니다. 이것은 단지 가장 긴 간격을 찾고 있기 때문에 조금 더 간단합니다. – Ben