Postgresql 每N天分组一次
我一直在用PostgreSQL搜索类似的东西,但还没有找到 假设我有下表:Postgresql 每N天分组一次,postgresql,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 52784
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天,我希望这几周按如下方式分组:
- 一月一日一月八日
- 2009年1月16日1月
- 一月十七日一月二十四日
- 2002年1月25日至2月25日(跨越月份没有问题)
- 2003年2月10日2月
(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'))
您可以创建SQLFIDLE吗?当然可以,为什么不呢?您好Mihai,查询中返回的这组数据不包括空天数。我还需要包括这些空的天数,这就是为什么我考虑只在天数中使用生成的临时表。@RenatoAlves因为它们什么都不做,所以您只需要直观地使用它们吗?@RenatoAlves下面是如何生成间隔并加入表中的方法。嗯,很好,有一种方法可以不用创建天数表就可以做到这一点吗?我的意思是,在Join@RenatoAlves这可能是我所不知道的。
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);