2017-06-17 2 views
2

Ich versuche, das Maximum eines Wertes über einen relativen Datumsbereich zu berechnen. Angenommen, ich habe diese Spalten: Datum, Woche, Kategorie, Wert. Hinweis: Die Spalte "Woche" ist der Montag der Woche des entsprechenden Datums.Berechne MAX für Wert über einen relativen Datumsbereich

Ich möchte eine Tabelle erstellen, die den MAX-Wert innerhalb der letzten zwei Wochen für jede Kombination aus Datum, Woche, Kategorie angibt, so dass die Ausgabe Folgendes erzeugt: Datum, Woche, Kategorie, Wert, 2WochePriorMAX.

Wie würde ich diese Frage schreiben? Ich glaube nicht, folgende funktionieren würde:

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

Die obige Abfrage berücksichtigt nicht für Fälle, in denen es fehlende Werte für eine bestimmte Kategorie sind, Woche Kombination innerhalb der letzten 2 Wochen, und deshalb wäre es umspannt weiter als 2 Wochen, wenn es die 2 vorhergehenden Reihen analysiert.

+1

LEFT JOINING es mit einer Daten Tabelle Sie würden Ihr Problem gelöst haben. –

+3

Markieren Sie Ihre Frage mit der von Ihnen verwendeten Datenbank. –

+0

Ihre Frage ähnelt [Datumsbereich Rolling Summe mit Fensterfunktionen] (https://dba.stackexchange.com/q/114403/57105) gefragt auf dba.se –

Antwort

1

Linke Verbindung oder Verwendung einer lateralen Verbindung/Unterabfrage kann teuer sein. Sie können dies mit Fensterfunktionen tun, aber Sie müssen ein bisschen mehr Logik haben:

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

danke. Genau das habe ich gesucht. – Sal

Verwandte Themen