计算相对日期范围内的值的最大值

问题描述:

我试图计算相对日期范围内的值的最大值。假设我有这些列:日期,周,类别,值。注意:“星期”列是相应日期的星期一。计算相对日期范围内的值的最大值

我想生成一个表格,在每个日期,星期,类别组合的最后两周内给出最大值,以便输出产生以下内容:日期,周,类别,值,2WeeksPriorMAX。

我该如何去写这个查询?我不认为有以下将工作:

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

上面的查询没有考虑那里有一个给定的类别,在过去2个星期内周组合遗漏值的情况下,因此将进一步跨越分析前两行的时间超过2周。

+1

左加入一个日期表你会让你的问题得到解决。 –

+3

用您正在使用的数据库标记您的问题。 –

+0

您的问题看起来类似于[使用窗口函数的日期范围滚动总和](https://dba.stackexchange.com/q/114403/57105),请问dba.se –

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

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; 
+0

谢谢。这正是我所期待的。 – Sal