2017-05-31 7 views
0

Ich habe eine Abfrage über die letzten 30 Tage, die Summen Umsatz summiert, aber ich möchte auch zusammen mit Summe der letzten 30 Tage, addieren Sie Durchschnitt der letzten 7 Tage. Ich möchte etwas wie dieses:Durchschnitt für Partition begrenzt von den letzten 7 Tagen

select 
    country 
    , avg(revenue) over (partition by country range between current_date - 7 and current_date) avg_revenue_last_7_days 
    , sum(revenue) total_revenue_30_days 
from table 
group by 1,2 

Ist es möglich, Durchschnitt für eine geringere Anzahl von Tagen zu erhalten, als was Aggregation basiert?

Ich möchte Unterabfragen vermeiden, weil die Abfrage bereits ziemlich komplex ist.

+0

Wie kann man GROUP BY 2? Und kennzeichnen Sie keine irrelevanten Produkte. – Strawberry

+0

Sie sollten Beispieldaten und gewünschte Ergebnisse bereitstellen. . . oder zumindest dein Datenlayout. –

Antwort

1

Sie benötigen Fensterfunktionen nicht für diese, nur bedingte Aggregation:

select country, 
     avg(case when datecol between current_date - 7 and current_date 
       then revenue 
      end) as avg_revenue_last_7_days, 
     sum(case when datecol between current_date - 30 and current_date 
       then revenue 
      end) as total_revenue_30_days 
from table 
group by country; 
+0

... und ich würde 'WHERE datecol> = CURRENT_DATE - 30 'hinzufügen, um die Zeilen auf GROUP BY zu minimieren ... – marcothesane

Verwandte Themen