每N天分组一次

时间:2015-01-16 18:01:36

标签: postgresql

我一直在使用 PostgreSQL 搜索类似的东西,但还没找到。

假设我有下表:

id    order     amount    created_at
2     527837    10.0      2014-12-01T...
3     527838    50.0      2014-12-02T...
4     527839    30.0      2014-12-02T...
5     527840    40.0      2014-12-10T...
6     527841    80.0      2014-12-13T...

我想要一个查询,返回每个完整周7天的所有金额的总和(即使有一天没有订单):

示例:

week                    total_amount
Dec/01 - Dec/07         90.0
Dec/08 - Dec/15         120.0
Dec/16 - Dec/23         0.0
//...and so on until current date

另外,假设1月份有30天,2月份有28天,我希望将周数分组:

  • 月/ 01-JAN / 08
  • 月/ 09-JAN / 16
  • 月/ 17-JAN / 24
  • Jan / 25-Feb / 02(过了几个月没问题)
  • 二月/ 03 - 2月/ 10

这样做的最佳方式是什么?

编辑1:

我找到了一种方法来构建一个查询来生成一个临时表,其中包含我分组所需的日期,我只是将其分组并将其与原始表一起加入......

(SELECT TO_CHAR(generate_series, 'YYYY-MM-DD') as "day" FROM generate_series('2013-06-01 00:00'::timestamp,
                          '2015-06-01 00:00'::timestamp, '1 Day'))

] [`S

1 个答案:

答案 0 :(得分:3)

select date_trunc('week', created_At),date_trunc('week', created_At)+ INTERVAL '6' DAY,
    SUM(amount) 
from t
GROUP BY date_trunc('week', created_At)
ORDER BY MIN(created_At);

FIDDLE