Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 每N天分组一次_Postgresql - Fatal编程技术网

Postgresql 每N天分组一次

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

我一直在用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天,我希望这几周按如下方式分组:

  • 一月一日一月八日
  • 2009年1月16日1月
  • 一月十七日一月二十四日
  • 2002年1月25日至2月25日(跨越月份没有问题)
  • 2003年2月10日2月
最好的方法是什么

编辑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'))

您可以创建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);