I am working with an SNOWFLAKE snowflake  database.
And I am trying some windows operators using the snowflake SNOWFLAKE_SAMPLE_DATA database, and I encounter a situation with the cumulative functions.
The SQL that is not working is the following:
SELECT 
SUM( C_BIRTH_DAY )
OVER (PARTITION BY
     C_BIRTH_MONTH,
     C_BIRTH_YEAR 
     ORDER BY
     NVL(C_BIRTH_COUNTRY,'COSTA RICA')
     RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MAX1,
MIN( C_BIRTH_DAY )
OVER ( PARTITION BY C_BIRTH_MONTH ,
     C_BIRTH_YEAR 
     ORDER BY
     NVL(C_BIRTH_COUNTRY,'COSTA RICA')
     ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MIN1
FROM  CUSTOMER;
The provided SQL will fail returning an error message:
SNOWFLAKE Cumulative window frame unsupported for function SUM.
And the expected result is that the query should be executed.
I tried this query with several operators AVG,MAX,SUM and with all I got the same results.
Looking at the documentation it looks like the syntax is fine:
For cumulative windows
cumulativeFrame ::=
    {
       { ROWS | RANGE } BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
     | { ROWS | RANGE } BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
    }
And for sliding windows:
slidingFrame ::=
    {
       ROWS BETWEEN <N> { PRECEDING | FOLLOWING } AND <N> { PRECEDING | FOLLOWING }
     | ROWS BETWEEN UNBOUNDED PRECEDING AND <N> { PRECEDING | FOLLOWING }
     | ROWS BETWEEN <N> { PRECEDING | FOLLOWING } AND UNBOUNDED FOLLOWING
    }
So I currently cannot find an explanation for this error.
After trying all sort of things I found that if I switch the window syntax and instead of using RANGE I use rows like this:
SELECT 
SUM( C_BIRTH_DAY )
OVER (PARTITION BY
     C_BIRTH_MONTH,
     C_BIRTH_YEAR 
     ORDER BY
     NVL(C_BIRTH_COUNTRY,'CR')
     ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MAX1,
MIN( C_BIRTH_DAY )
OVER ( PARTITION BY C_BIRTH_MONTH ,
     C_BIRTH_YEAR 
     ORDER BY
     NVL(C_BIRTH_COUNTRY,'CR')
     ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MIN1
FROM  CUSTOMER;
It works!!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With