2016-05-05 6 views
0

私は、週(week_no、week_start、およびweek_end)に配置された注文の数を提供する再帰的クエリを持っています。私は1ヶ月間の分析のために同様の内訳を作成したいと思います。月から週までの週から月への再帰クエリの変換

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) 

ご協力いただければ幸いです。

答えて

1

なぜこのために再帰的クエリを使用しますか? 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); 

ヶ月の同等のようになる:

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); 
関連する問題