1
我有以下結構的表:
| LearnerId | FirstName | LastName | EnrollmentDate | CompletionDate |
我需要得到該學校已經沒有時間最長使用SQL查詢註冊或完成學習者。我該怎麼做呢?
我有以下結構的表:
| LearnerId | FirstName | LastName | EnrollmentDate | CompletionDate |
我需要得到該學校已經沒有時間最長使用SQL查詢註冊或完成學習者。我該怎麼做呢?
我假設你有熱膨脹係數和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
@布賴恩,是公平的是不太一樣的。那個人正在尋找最長距離開始的ID。這有點簡單,因爲它只是尋找最長的差距。 – Ben