2012-07-04 6 views
1

가능한 중복 : 나는 아래 구조의 테이블을 가지고
SQL: finding longest date gapSQL에서 간격이없는 가장 긴 시간을 찾으려면 어떻게합니까?

:

나는 학교가없이 간 가장 긴 기간을 얻을 필요가
| LearnerId | FirstName | LastName | EnrollmentDate | CompletionDate | 

SQL 쿼리를 사용하여 학습자를 등록 또는 완료합니다. 어떻게해야합니까?

+1

이 숙제가 있습니까? 그렇다면 태그를 붙이십시오. – SWeko

+0

이전에 물어 본 : http://stackoverflow.com/questions/1315262/sql-finding-longest-date-gap – Brian

+0

@Brian, 상당히 똑같은 것은 아닙니다. 그 사람은 가장 긴 간격이 시작되는 ID를 찾고 있습니다. 이것은 단지 가장 긴 간격을 찾고 있기 때문에 조금 더 간단합니다. – Ben

답변

1

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 
관련 문제