Postgresql-从单行动态选择多行

pinkon5k  于 2023-03-01  发布在  PostgreSQL
关注(0)|答案(1)|浏览(100)

我有一个名为month frequency(freq_mnth)的列,如果一行的frequency为3,则该记录必须显示4次才能完成一年计划,每个记录的日期为3个月以上
同样,频率为4时,记录必须显示3次,日期为4个月+
如果频率为12,则按原样显示记录
我有下表
| 身份证|日期|频率_月|
| - ------|- ------|- ------|
| 1个|2023年1月1日|三个|
| 第二章|2023年1月1日|十二|
| 三个|2023年1月1日|四个|
我需要以下结果集
| 身份证|日期|频率_月|
| - ------|- ------|- ------|
| 1个|2023年1月1日|三个|
| 1个|二○二三年四月一日|三个|
| 1个|2023年8月1日|三个|
| 1个|二〇二三年十二月一日|三个|
| 第二章|2023年1月1日|十二|
| 三个|2023年1月1日|四个|
| 三个|二○二三年六月一日|四个|
| 三个|二〇二三年十二月一日|四个|
谢谢你Ramya

yiytaume

yiytaume1#

由于不了解确切的要求,我没有一个解决方案,但是您可以使用generate_series将查询结果简单地扩展为代表每个原始行的一定数量的行。

CREATE TABLE dates
    ("id" int, "mdate" date, "freq_mnth" int)
;
    
INSERT INTO dates
    ("id", "mdate", "freq_mnth")
VALUES
    (1, '2023-01-01', 3),
    (2, '2023-01-01', 12),
    (3, '2023-01-01', 4)
;

select dates.id
, dates.mdate 
 , (dates.mdate + (((generate_series(1,12/freq_mnth)-1)*12/freq_mnth)::text ||' month')::interval)::date as array_value_used_with_time
, generate_series(1,12/freq_mnth) as array_value
from dates

其提供输出:

id  mdate   array_value_used_with_time  array_value
1   2023-01-01  2023-01-01  1
1   2023-01-01  2023-05-01  2
1   2023-01-01  2023-09-01  3
1   2023-01-01  2024-01-01  4
2   2023-01-01  2023-01-01  1
3   2023-01-01  2023-01-01  1
3   2023-01-01  2023-04-01  2
3   2023-01-01  2023-07-01  3

下面是一个SQL Fiddle示例

相关问题