取消堆叠开始和结束日期到月份

吕克
cust_id   start      end         subs_price_p_month     
1       2019-01-01  2019-12-10           50.00
1       2020-02-03  2020-08-05           39.99
2       2019-12-11  2020-11-08           29.99

我想“拆开”上面的表格,以便每一行都包含 1 个月的订阅价格:

cust_id   month        subs_price_p_month     
1       2019-01-01            50.00
1       2019-02-01            50.00
1       2019-03-01            50.00
....
1       2019-12-01            50.00
1       2020-02-01            39.99
1       2020-03-01            39.99
1       2020-04-01            39.99
....
1       2020-08-01            39.99
2       2019-12-01            29.99
2       2020-01-01            29.99
2       2020-02-01            29.99
...
2       2020-11-01            29.99

文字说明:客户 ID 1 有 2 个不同价格的订阅。第一个从 2020 年 1 月 1 日到 2020 年 12 月开始,第二个从 2021 年 2 月 3 日到 2020 年 8 月 5 日开始。客户 ID 2 只有 1 个订阅,从 2019 年 12 月到 2020 年 11 月。

我希望每一行等于 1 个客户 ID,1 个月以便于数据操作。

吉姆·琼斯

使用generate_series间隔为 1 个月,范围从startend,例如:

SELECT 
  cust_id,
  generate_series(start,end,interval '1 month'),
  subs_price_p_month 
FROM t;

 cust_id |    generate_series     | subs_price_p_month 
---------+------------------------+--------------------
       1 | 2019-01-01 00:00:00+01 |              50.00
       1 | 2019-02-01 00:00:00+01 |              50.00
       1 | 2019-03-01 00:00:00+01 |              50.00
       1 | 2019-04-01 00:00:00+02 |              50.00
       1 | 2019-05-01 00:00:00+02 |              50.00
       1 | 2019-06-01 00:00:00+02 |              50.00
       1 | 2019-07-01 00:00:00+02 |              50.00
...

也许甚至将日期格式化为 'Month YYYY' 会更好地显示您的结果集:

SELECT 
  cust_id,
  to_char(generate_series(start_,end_,interval '1 month'),'Month YYYY')
  subs_price_p_month 
FROM t;

cust_id |    to_char     | subs_price_p_month 
---------+----------------+--------------------
       1 | January   2019 |              50.00
       1 | February  2019 |              50.00
       1 | March     2019 |              50.00
       1 | April     2019 |              50.00
       1 | May       2019 |              50.00
       1 | June      2019 |              50.00
       1 | July      2019 |              50.00
   ...

演示: db<>fiddle

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MySQL - 计算月份的开始和结束日期

当前月份的开始和结束日期

获取特定月份的开始日期和结束日期

给定开始日期和结束日期的月份中的天数

Howto grep定义了开始日期和结束日期的月份

TSQL 根据开始和结束日期生成月份

以角度计算特定月份给定周数的开始和结束日期

自定义月份的开始和结束日期

Excel:显示从开始和结束日期生成的月份名称集合?

按月份名称,而不是数月获取的开始和结束日期

循环开始月份和开始年份到结束月份和年份python

如何生成具有开始月份日期和结束月份日期的动态表 Teradata 或 SAS SQL

如何生成具有开始月份日期和结束月份日期的日历表

从开始的月份和年份到结束的月份和年份提取数据不起作用的python pandas

设置开始日期和结束日期以存储到 Firebase 云中?

如何在laravel中通过月份值并获取月份的开始和结束日期

获取具有不同月份开始和结束日期的月份名称

通过PHP中月份的星期数获取月份的开始和结束日期

python中日期范围之间的月份开始日期和结束日期

基于服务日期列的 YTD 月份开始日期和结束日期 - SQL Server

获取在python或mysql中2个日期之间传递的所有月份的月份开始日期和结束日期

MYSQL-计算开始日期和结束日期之间当前月份的天数

将适当的月份开始日期和结束日期传递给并行

获取具有给定月份的开始日期和结束日期的所有星期(NSDate目标C)

在VBA中从开始日期和结束日期中提取月份-Excel

如何获取当前月份的开始日期和结束日期(快速3)

将日期时间索引枢轴到开始和结束列

在Unix中查找给定年份和月份的开始和结束日期

如何在PostgreSQL中编写函数以根据传递给月份的名称获取月份的开始日期和结束日期