まず、CONNECT BY句を使用して特定の期間内の日付を生成するクエリを作成します。以下は、週ごとの日付範囲を生成する例です。
SELECT TRUNC(start_date + (LEVEL-1) * 7, 'IW') AS start_week,
TRUNC(start_date + (LEVEL-1) * 7, 'IW') + 6 AS end_week
FROM
(SELECT DATE '2024-01-01' AS start_date,
DATE '2024-12-31' AS end_date
FROM dual)
CONNECT BY TRUNC(start_date + (LEVEL-1) * 7, 'IW') <= end_date;
上記のクエリでは、開始日と終了日を指定し、CONNECT BY句を使用して週ごとの日付範囲を生成しています。LEVEL
はCONNECT BYレベルを表し、週ごとに1ずつ増加させています。TRUNC
関数を使用して、日付を週の最初の日(月曜日)に丸めています。
同様に、月ごとの日付範囲を生成するクエリも作成できます。以下は、月ごとの日付範囲を生成する例です。
SELECT TRUNC(start_date, 'MM') AS start_month,
LAST_DAY(start_date) AS end_month
FROM
(SELECT DATE '2024-01-01' AS start_date,
DATE '2024-12-31' AS end_date
FROM dual)
CONNECT BY TRUNC(start_date, 'MM') <= end_date;
上記のクエリでは、開始日と終了日を指定し、CONNECT BY句を使用して月ごとの日付範囲を生成しています。TRUNC
関数を使用して、日付を月の最初の日に丸めています。また、LAST_DAY
関数を使用して、月の最後の日を取得しています。
このようにして、CONNECT BY句を使用して、週ごとや月ごとなどの日付範囲を生成することができます。これらのクエリを適宜修正して、特定の期間や時間単位に合わせた日付範囲を作成してください。