Thi*_*ima 5 sql snowflake-cloud-data-platform
我正在将一些 BigQuery 代码迁移到雪花,但在使用带有范围的 Window 函数时遇到了一些麻烦。这是因为 Snowflake 系列不支持滑动窗框。我需要使用“2 前一行和当前行之间的范围”逻辑,关于如何在雪花上复制此逻辑有什么想法吗?
WITH base AS (
SELECT * FROM (
SELECT 7 AS num
UNION ALL SELECT 2 AS num
UNION ALL SELECT 2 AS num
UNION ALL SELECT 5 AS num
UNION ALL SELECT 3 AS num
UNION ALL SELECT 7 AS num
UNION ALL SELECT 7 AS num
))
SELECT
num,
COUNT(*) OVER (ORDER BY num ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS row_count,
COUNT(*) OVER (ORDER BY num RANGE BETWEEN 2 PRECEDING AND CURRENT ROW) AS range_count,
SUM(num) OVER (ORDER BY num ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS row_sum,
SUM(num) OVER (ORDER BY num RANGE BETWEEN 2 PRECEDING AND CURRENT ROW) AS range_sum
FROM base
ORDER BY num
Run Code Online (Sandbox Code Playgroud)
预期结果:在此输入图像描述
从评论中获取具体问题:您可以使用子查询来解决这个问题。
例如,在这里我将查找每行的 MIN(先前值),回顾 365 天,并按客户分区:
with DATA as (
select *
from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS
)
select O_CUSTKEY, O_ORDERDATE, O_TOTALPRICE
, (
select min(O_TOTALPRICE)
from DATA
where A.O_CUSTKEY=O_CUSTKEY
and O_ORDERDATE between A.O_ORDERDATE-365 and A.O_ORDERDATE
) min_value
from DATA A
order by O_CUSTKEY, O_ORDERDATE
limit 10;
Run Code Online (Sandbox Code Playgroud)