1

重複の可能性:
SQL: 最長の日付ギャップを見つける

以下の構造のテーブルがあります。

| LearnerId | FirstName | LastName |  EnrollmentDate  | CompletionDate |

SQLクエリを使用して、学校が学習者を登録または完了せずに行った最長期間を取得する必要があります。どうすればいいですか?

4

1 に答える 1

1

CTE とROW_NUMBER().

まず、日付の順序付きリストが必要です。つまり、2 つの列ではなく 1 つの列です。次に、ある日付をすぐ次の日付と非常に簡単に比較できます。

2 つの列にデータがあるため、この 1 つの順序付きリストを作成すると、比較的コストがかかります。膨大な量のデータを持っていないことを願っています。

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
于 2012-07-04T11:24:58.910 に答える