可能重复:
SQL:找到最长的日期间隔
我有一个下面结构的表:
| LearnerId | FirstName | LastName | EnrollmentDate | CompletionDate |
我需要使用 SQL 查询来获取学校在没有注册或完成学习者的情况下最长的时间。我该怎么做呢?
可能重复:
SQL:找到最长的日期间隔
我有一个下面结构的表:
| LearnerId | FirstName | LastName | EnrollmentDate | CompletionDate |
我需要使用 SQL 查询来获取学校在没有注册或完成学习者的情况下最长的时间。我该怎么做呢?
我假设您可以访问 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