2015-01-16 49 views
2

我一直在寻找类似的东西,使用PostgreSQL,但还没有找到。每N天组

让我们假设我有如下表:

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 

而且,让假设,即月有30天,二月有28天,我想星期这样的分组:

  • 月/ 01-JAN/08
  • 月/ 09-JAN/16
  • 月/ 17-JAN/24
  • 月/ 25月/ 02(孤单上交叉个月没有问题)
  • 月/ 03月/ 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

+0

你可以创建一个sqlfiddle吗? – Mihai

+0

当然,为什么不呢? http://sqlfiddle.com/#!15/45dc6/1 –

回答

2
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

+0

Hi Mihai, 查询中返回的这组数据不包含空天。我还需要包括这些空闲的日子,这就是为什么我只想在日子里使用生成的临时表。 –

+0

@RenatoAlves你想要他们只是视觉,因为他们不做任何事情? – Mihai

+1

@RenatoAlves这里是你如何生成一个间隔和JOIN在你的桌上.http://sqlfiddle.com/#!1/76c29/15 – Mihai