In Snowflake, how can I declare variables to make the this CTE calendar table dynamic?
The below works if I hardcode the start_date
and day_count
params, but I'd like to make it more dynamic.
SET '2020-01-01' = start_date
SET '2021-01-01' = end_date
SET day_count = @start_date - @end_date
create temp table dummy_1(start_date date, end_date date, day_count int) as select $start_date::date, $end_date::date, datediff(day, $start_date::date,$end_date::date)
WITH T AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY SEQ4()) AS num,
DATEADD('day', ROW_NUMBER() OVER (ORDER BY SEQ4()) - 1, @start_date)::DATE AS date
FROM
TABLE(GENERATOR(ROWCOUNT => @day_count))
)
SELECT *
FROM T
There may very well be a better way, but this is a way hinted at in the comments.
Snowflake generators don't seem to like variables.
SET start_date = '2020-01-01';
SET end_date = '2021-01-01';
create temp table dummy(start_date date, end_date date, day_count int) as
select $start_date::date, $end_date::date, datediff(day, $start_date::date,$end_date::date);
WITH T AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY SEQ4()) AS num,
DATEADD('day', ROW_NUMBER() OVER (ORDER BY SEQ4()) - 1, (select max(start_date) from dummy)) AS date
FROM TABLE(GENERATOR(ROWCOUNT => ((select max(day_count) from dummy))))
)
SELECT *
FROM T