** EDIT **
SELECT DATEADD(MONTH, SEQ4(), to_date('2020-12-01')) AS "REPORTING MONTH" FROM TABLE (GENERATOR(ROWCOUNT => 12))
Root cause is the seq4() function is causing the issue when there are large number of records , is there any alternative to seq4() ( tried seq8() too but din't work either)
I am trying to generate a cartesian product of results from two tables in snowflake.
As you can see in second query M was generating results for all the months of 2020 and cross joined with Query A that returns around 1717 results. Final output has 18887 results.
Can you please let me know the right way to use cross join ?
Question
- However the "REPORTING MONTH" field has three invalid values '2021-05-01' , '2022-01-01' , '2022-09-01' for each row in Query A, i.e
Expected
A1 , 2020-01-01
A1 , 2020-02-01
A1 , 2020-03-01
A1 , 2020-04-01
A1 , 2020-05-01
A1 , 2020-06-01
A1 , 2020-07-01
A1 , 2020-08-01
A1 , 2020-09-01
A1 , 2020-10-01
A1 , 2020-11-01
A1 , 2020-12-01
Error Actual
A1 , 2020-01-01
A1 , 2020-02-01
A1 , 2020-03-01
A1 , 2020-04-01
A1 , 2020-05-01
A1 , 2020-06-01
A1 , 2020-07-01
A1 , 2020-08-01
A1 , 2020-09-01
A1 , 2021-05-01 (invalid)
A1 , 2022-01-01 (invalid)
A1 , 2022-09-01 (invalid)
WITH A AS (
(SELECT * FROM (SELECT TO_TIMESTAMP_NTZ(TO_VARCHAR(EVENT_TIME, 'YYYY-MM-01')) AS "EVENT REPORTING MONTH", *,
RANK() OVER (PARTITION BY ID, SERVICE_TYPE ORDER BY EVENT_TIME) AS RANK FROM "MY_TABLE") AS E
WHERE RANK = 1 AND DATEDIFF(MONTH , DATE("EVENT REPORTING MONTH") ,CURRENT_DATE()) > 0)
),
M AS (
SELECT DATEADD(MONTH, SEQ4(), to_date('2020-01-01')) AS "REPORTING MONTH" FROM TABLE (GENERATOR(ROWCOUNT => 12))
),
F AS (
SELECT * FROM A cross JOIN M
)
SELECT * FROM F order by "ID","REPORTING MONTH" DESC