SQL给定开始日期和结束日期,总计,我需要将它分成几天

时间:2017-02-18 04:54:44

标签: sql postgresql

我在postgress有一张简单的桌子。

它有开始日期,结束日期和总音量

示例2016年1月1日,2016年12月31日和360,0000

我需要分成以下输出

1 Jan 2016 360000/366
2 Jan 2016 360000/366

...
..
..
31 Dec 2016 360000/366

366是2016年的天数

需要将输出发送到另一个表。最简单的方法是什么?有些跨越20 - 30年。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用generate_series()

with const as (
      select '2016-01-01'::date as date_start, '2016-12-31'::date as date_end, 360000 as amt
     )
select g.dte, amt / (date_end - date_start + 1.0)
from const, lateral
     generate_series(date_start, date_end, interval '1 day') as g(dte) ; 

Postgres的所有版本都不支持横向连接,因此您也可以这样做:

select generate_series(date_start, date_end, interval '1 day') as dte,
       amt / (date_end - date_start + 1.0)
from const