我用的是PostgreSQL 我想用DML+DQL+创建中间表的方式 按每天进行拆分 现有A表 我想得到B表
A:
开始日期 截止日期 目标
20220101 20220205 80
B:
日期 目标
20220101 80
20220102 80
20220103 80
.
.
20220203 80
20220204 80
20220205 80
恳请帮忙 由于公司数据库缘故 只能DML,DQL,创建表 没办法写PLSQL
该回答引用ChatGPT
请参考下面的解决方案,如果有帮助,还请点击 “采纳” 感谢支持!
1.创建一个中间表,用于存储日期。
CREATE TABLE dates(date date);
2.将每天的日期填充到中间表中。
WITH dates AS (
SELECT generate_series(start_date, end_date, '1 day')::date AS date
FROM A
)
INSERT INTO dates (date)
SELECT date
FROM dates;
3 .将中间表和A表关联起来,得到结果表B
CREATE TABLE B AS
SELECT date, target
FROM dates
JOIN A
ON date BETWEEN start_date AND end_date;
注意:需要在A表中有 start_date, end_date, target 列,并且使用PostgreSQL 9.3版本或更高版本,否则 generate_series() 函数将不能正常工作。
1、PGSQL中有函数可直接生成日期序列的:
SELECT d::date, 80 mb FROM generate_series( '20220101'::timestamptz, '20220205'::timestamptz, '1 day'::INTERVAL ) d;
输出结果: