【问题标题】:Sliding window maximum in snowflake sql雪花sql中的滑动窗口最大值
【发布时间】:2022-09-27 16:39:00
【问题描述】:

我需要在 Snowflake 中找到日期列的滑动窗口最大值。此处的窗口大小为 2,最大值存储在新列中。这是我的代码。

WITH temp AS(
  SELECT DISTINCT L_SHIPDATE
  FROM my_table
)

SELECT L_SHIPDATE, MAX(L_SHIPDATE) OVER (ORDER BY \'Row\' ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS MAX_L_SHIPDATE
FROM temp

下面是我的输出。这是错误的。在第 1 行中,MAX_L_SHIPDATE 必须是第 1 行和第 2 行的 max L_SHIPDATE,即 1997-08-04,第 2 行必须是第 2 行和第 3 行的 max(L_SHIPDATE),即 1998-01-03,依此类推。如何解决这个问题?

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


    【解决方案1】:

    您按“行”排序 - 这没有特别的顺序。我包括 row_number 按行号排序:

    select temp AS(
      SELECT DISTINCT L_SHIPDATE
      FROM my_table
    ),
    temp_with_rn as (
      select row_number() OVER (ORDER BY 1) rn, L_SHIPDATE 
      FROM temp
    )
    SELECT L_SHIPDATE, MAX(L_SHIPDATE) OVER (ORDER BY rn ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS MAX_L_SHIPDATE
    FROM temp_with_rn
    ORDER BY rn;
    

    或者,也许您想按 L_SHIPDATE 订购:

    with temp as (
      SELECT DISTINCT L_SHIPDATE
      FROM my_table
    )
    SELECT L_SHIPDATE, MAX(L_SHIPDATE) OVER (ORDER BY L_SHIPDATE ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS MAX_L_SHIPDATE
    FROM temp
    ORDER BY L_SHIPDATE;
    

    【讨论】:

    • 这很棒!小修正,第一行中的选择必须替换为 with ?
    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 2013-02-06
    • 2017-04-03
    • 2017-09-03
    • 2022-11-17
    • 2019-12-04
    • 2012-06-03
    • 2020-08-09
    相关资源
    最近更新 更多