简体   繁体   中英

SNOWFLAKE Cumulative window frame unsupported for function SUM

I am working with an 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!!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM