因为指定时间段内某些日期可能没有交易数据,所以需要补齐。
使用postgresql序列生成函数,生成连续日期,再进行查询。
如下:
函数 | 参数类型 | 返回类型 | 描述 |
---|---|---|---|
generate_series(start,stop) | int或bigint | setof int或setof bigint(与参数类型相同)) | 生成一个数值序列,从start到stop,步长为1 。 |
generate_series(start,stop,step) | int或bigint | setof int或setof bigint(与参数类型相同)) | 生成一个数值序列,从start到stop,步长为step。 |
generate_series(start,stop,step) | timestamp或timestamp with time zone | setof timestamp或setof timestamp with time zone(与参数类型相同) | 生成一个数值序列,从start到stop,步长为step。 |
网上有人的用法(如下),先计算日期相差天数,查询中进行日期累加,我觉得反而变复杂了
select to_char(cast('20081001' as date) + s.a,'yyyyMMdd') as 统计日期 from generate_series(0,cast('20081031' as date)-cast('20081001' as date),1) as s(a)
postgresql中给的例子是:
SELECT * FROM generate_series('2008-03-01 00:00'::timestamp, '2008-03-04 12:00', '10 hours');
generate_series ---------------------
2008-03-01 00:00:00
2008-03-01 10:00:00
2008-03-01 20:00:00
2008-03-02 06:00:00
2008-03-02 16:00:00
2008-03-03 02:00:00
2008-03-03 12:00:00
2008-03-03 22:00:00
2008-03-04 08:00:00
(9 rows)
稍作修改如下:
SELECT to_char(a,'yyyyMMdd') FROM generate_series('2008-03-01'::date,'2008-03-04','1 days') as a;
"20080301"
"20080302"
"20080303"
"20080304"
满足现在使用场景。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。