【问题标题】:Snowflake SQL Range between interval雪花 SQL 区间之间的范围
【发布时间】:2021-01-27 22:09:12
【问题描述】:

我有以下结构的输入表 - ID、日期、值。

我正在尝试为数据集中的每条记录计算过去 10 个月的最小值。为此,我使用range between interval

下面的代码在 SPARK SQL 中运行良好,但由于某种原因,我不能在雪花 SQL 中使用相同的代码。感谢是否有人可以指导我如何修改以下代码以在 Snowflake SQL 中运行

select *,
min(avg_Value) OVER (
        PARTITION BY ID 
        ORDER BY CAST(Date AS timestamp)  
        RANGE BETWEEN INTERVAL 10 MONTHS PRECEDING AND CURRENT ROW) as min_value_in_last_10_months
from        
(
select  ID,
        Date,
        avg(Value) as avg_Value
from table
group by ID,Date
)

【问题讨论】:

标签: sql snowflake-cloud-data-platform snowsql


【解决方案1】:

如果你的结果表中有所有月份,那么你也可以试试这个

select *,
min(avg_Value) OVER (
        PARTITION BY ID 
        ORDER BY CAST(Date AS timestamp)  
        ROWS BETWEEN 9 PRECEDING AND CURRENT ROW) as min_value_in_last_10_months
from        
(
select  ID,
        Date,
        avg(Value) as avg_Value
from table
group by ID,Date
)

【讨论】:

    【解决方案2】:

    Snowflake 支持横向连接,所以一种方法是:

    select . . .
    from t cross join lateral
         (select avg(t2.value) as avg_value
          from t t2
          where t2.id = t.id and
                t2.date >= t.date - interval 10 month and
                t2.date <= t.date
         ) a
    

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2021-09-21
      • 2020-01-29
      相关资源
      最近更新 更多