【问题标题】:Calculate MAX for value over a relative date range计算相对日期范围内的值的 MAX
【发布时间】:2017-11-19 21:01:56
【问题描述】:

我正在尝试计算相对日期范围内的最大值。假设我有这些列:日期、周、类别、值。注意:Week 列是相应日期的一周中的星期一。

我想生成一个表格,给出过去两周内每个日期、周、类别组合的 MAX 值,以便输出生成以下内容:日期、周、类别、值、2WeeksPriorMAX。

我将如何编写该查询?我认为以下方法行不通:

SELECT Date, Week, Value, 
       MAX(Value) OVER (PARTITION BY Category 
                         ORDER BY Week 
                         ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as 2WeeksPriorMAX

上述查询未考虑过去 2 周内给定 Category、Week 组合缺少值的情况,因此在分析前 2 行时,它会跨越 2 周以上。

【问题讨论】:

标签: sql amazon-redshift window-functions


【解决方案1】:

左连接或使用横向连接/子查询可能会很昂贵。你可以用窗口函数做到这一点,但你需要有更多的逻辑:

select t.*,
       (case when lag(date, 1) over (partition by category order by date) < date - interval '2 week'
             then value
             when lag(date, 2) over (partition by category order by date) < date - interval '2 week'
             then max(value) over (partition by category order by date rows between 1 preceding and current row)
             else max(value) over (partition by category order by date rows between 2 preceding and current row)
        end) as TwoWeekMax
from t;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多