2012-07-04 38 views
1

可能重複:
SQL: finding longest date gap如何找到SQL中沒有間隙的最長時間段?

我有以下結構的表:

| LearnerId | FirstName | LastName | EnrollmentDate | CompletionDate | 

我需要得到該學校已經沒有時間最長使用SQL查詢註冊或完成學習者。我該怎麼做呢?

+1

這是功課?如果是這樣,請標記爲這樣。 – SWeko

+0

前問:http://stackoverflow.com/questions/1315262/sql-finding-longest-date-gap – Brian

+0

@布賴恩,是公平的是不太一樣的。那個人正在尋找最長距離開始的ID。這有點簡單,因爲它只是尋找最長的差距。 – Ben

回答

1

我假設你有熱膨脹係數和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