2016-05-05 4 views
0

Ich habe eine rekursive Abfrage, die die Anzahl der Bestellungen angibt, die Woche für Woche (week_no, week_start und week_end) aufgegeben wurden. Ich möchte eine ähnliche Aufschlüsselung für eine Analyse von Monat zu Monat erstellen.Rekursive Abfrage von Woche über Woche in Monat um Monat umwandeln

WITH recursive weeks (week_start, week_end, time_end, weekno) AS (
VALUES ('2015-12-27'::date, '2016-01-02'::date, '2016-04-02'::date, 1) 
UNION ALL 
SELECT (week_end + interval '1 day')::date, 
     (CASE 
       WHEN (week_end + interval '7 days')::date > time_end THEN time_end 
       ELSE (week_end + interval '7 days')::date 
     END)::date, 
     time_end, 
     weekno+1 
FROM weeks 
WHERE time_end > week_end) 

Jede Hilfe würde sehr geschätzt werden.

Antwort

1

Warum würden Sie eine rekursive Abfrage dafür verwenden? Verwenden Sie generate_series():

select g.week_start, g.week_start + interval '6 day' as week_end, 
     row_number() over (order by g.week_start) as weeknum 
from generate_series('2015-12-27'::timestamp, 
        '2016-01-02'::timestamp, 
        interval '1 week' 
        ) g(week_start); 

Das Äquivalent für Monate wie wäre:

select g.month_start, g.month_start + interval '1 month' - interval '1 day' as month_end, 
     row_number() over (order by g.month_start) as monthnum 
from generate_series('2015-12-01'::timestamp, 
        '2016-01-01'::timestamp, 
        interval '1 month' 
        ) g(month_start);