CTE – generowanie listy dat z zakresu od-do

16-sty-2013

Ładny przykład na CTE znalazłem:

http://blog.justinstolle.com/sql-turn-a-date-range-into-a-list-of-dates/

Przykład ma wygenerować listę dat w oparciu o zapisany w rekordzie przedział dat. Na wszelki wypadek przeklejam przykład poniżej:

DECLARE @dateranges TABLE (range_id VARCHAR(2), date_begin DATETIME, date_end DATETIME)

INSERT @dateranges SELECT 'A’, '2010-01-01′, '2010-01-03′

INSERT @dateranges SELECT 'B’, '2008-02-27′, '2008-03-01′

INSERT @dateranges SELECT 'C’, '2010-04-26′, '2010-04-26

'INSERT @dateranges SELECT 'D’, '2000-02-01′, '2003-02-20′ ;

WITH cte (id, d)

AS (

SELECT tbl.range_id AS id ,tbl.date_begin AS d
FROM @dateranges tbl
WHERE DATEDIFF(DAY, tbl.date_begin, tbl.date_end) <= 100
UNION ALL
SELECT tbl.range_id AS id ,DATEADD(DAY, 1, cte.d) AS d
FROM cte
INNER JOIN @dateranges tbl ON cte.id = tbl.range_id
WHERE cte.d < tbl.date_end)

SELECT id AS range_id ,d AS date_within_range FROM cte ORDER BY id, d

Komentarze są wyłączone

Autor: Rafał Kraik