再帰的な共通表式で補助テーブルを作成する


共通表式(WITH句)を再帰的に定義することで、連番などの補助テーブルを楽に作成することができる。
今回は、現在の時刻から、当日中の時刻を15分間隔で列挙するクエリを作成してみた。

WITH TimeTable (point, interval) AS
(
    SELECT
        GETDATE(), 15
    UNION ALL
    SELECT
        DATEADD(minute,interval,point), interval
    FROM
        TimeTable
    WHERE
        DATEADD(minute,interval,point) < CAST(DATEADD(day,1,GETDATE()) AS date)
)

SELECT point FROM TimeTable

/* 結果
point
-----------------------
2019-04-28 20:27:17.327
2019-04-28 20:42:17.327
2019-04-28 20:57:17.327
2019-04-28 21:12:17.327
2019-04-28 21:27:17.327
2019-04-28 21:42:17.327
2019-04-28 21:57:17.327
2019-04-28 22:12:17.327
2019-04-28 22:27:17.327
2019-04-28 22:42:17.327
2019-04-28 22:57:17.327
2019-04-28 23:12:17.327
2019-04-28 23:27:17.327
2019-04-28 23:42:17.327
2019-04-28 23:57:17.327
*/