每条记录的Postgresql时间序列

每条记录的Postgresql时间序列,postgresql,time-series,aggregate,timeserieschart,Postgresql,Time Series,Aggregate,Timeserieschart,我一直在思考如何从我的Postgres数据库中提取一些时间序列统计数据 例如,我有几家商店。我在一张表中记录了每家商店每天的销售额,如下所示: +------------+----------+-------+ | Date | Store ID | Count | +------------+----------+-------+ | 2017-02-01 | 1 | 10 | | 2017-02-01 | 2 | 20 | | 2017-0

我一直在思考如何从我的Postgres数据库中提取一些时间序列统计数据

例如,我有几家商店。我在一张表中记录了每家商店每天的销售额,如下所示:

+------------+----------+-------+
|    Date    | Store ID | Count |
+------------+----------+-------+
| 2017-02-01 |        1 |    10 |
| 2017-02-01 |        2 |    20 |
| 2017-02-03 |        1 |    11 |
| 2017-02-03 |        2 |    21 |
| 2017-02-04 |        3 |    30 |
+------------+----------+-------+

我尝试在每行存储不同行的条形图上显示这些数据,空白日期用0。< /P>填写。 我已经成功地使用

generate_series
让它显示每天的金额(将所有门店合并为一个金额),但我不知道如何将其分开,以便每个门店每天都有一个值。。。结果是:

["Store ID 1", 10, 0, 11,  0]
["Store ID 2", 20, 0, 21,  0]
["Store ID 3",  0, 0,  0, 30]

有必要构建交叉连接日期X存储:

select store_id, array_agg(total order by date) as total
from (
    select store_id, date, coalesce(sum(total), 0) as total
    from
        t
        right join (
            generate_series(
                (select min(date) from t),
                (select max(date) from t),
                '1 day'
            ) gs (date)
            cross join
            (select distinct store_id from t) s
        ) using (date, store_id)
    group by 1,2
) s
group by 1
order by 1
;
 store_id |    total    
----------+-------------
        1 | {10,0,11,0}
        2 | {20,0,21,0}
        3 | {0,0,0,30}
样本数据:

create table t (date date, store_id int, total int);
insert into t (date, store_id, total) values
('2017-02-01',1,10),
('2017-02-01',2,20),
('2017-02-03',1,11),
('2017-02-03',2,21),
('2017-02-04',3,30);