2017-06-17 92 views
2

我試圖計算相對日期範圍內的值的最大值。假設我有這些列:日期,周,類別,值。注意:「星期」列是相應日期的星期一。計算相對日期範圍內的值的最大值

我想生成一個表格,在每個日期,星期,類別組合的最後兩週內給出最大值,以便輸出產生以下內容:日期,周,類別,值,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 –

回答

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

謝謝。這正是我所期待的。 – Sal

相關問題