如何在PostgreSQL中根据days列条件新增日期递增的行
根据days列生成递增日期行的实现方案
方法一:Excel操作步骤
假设你的数据在A(Date)、B(Group)、C(days)列,第一行是表头:
- 插入辅助列D,在D2输入公式:
=SEQUENCE(C2,1,A2,1),回车后会生成从当前Date开始、共days天的日期序列(比如A组会生成1/1/2023、2/1/2023、3/1/2023) - 选中D2单元格,鼠标移到单元格右下角,光标变成十字时双击,自动填充所有行的辅助列
- 选中A到D列,按
Ctrl+G打开定位窗口,点击「定位条件」选择「常量」,确定后选中所有非公式的单元格(表头和原始数据行) - 右键点击选中区域选择「复制」,在空白区域右键「粘贴」,得到展开后的基础数据
- 删除辅助列D,调整格式即可得到目标结果:
- A组3行,Date依次为1/1/2023、2/1/2023、3/1/2023,days均为3
- B组4行,Date依次为5/1/2023、6/1/2023、7/1/2023、8/1/2023,days均为4
方法二:Python Pandas实现
如果用Python处理,Pandas可以快速批量完成:
import pandas as pd # 模拟原始数据 df = pd.DataFrame({ 'Date': ['1/1/2023', '5/1/2023'], 'Group': ['A', 'B'], 'days': [3, 4] }) # 把Date列转为日期格式 df['Date'] = pd.to_datetime(df['Date'], dayfirst=True) # 按days生成递增日期并展开行 df_expanded = df.assign( Date=df.apply(lambda x: pd.date_range(start=x['Date'], periods=x['days'], freq='D'), axis=1) ).explode('Date', ignore_index=True) # 把日期转回原始显示格式(可选) df_expanded['Date'] = df_expanded['Date'].dt.strftime('%d/%m/%Y') print(df_expanded)
运行后输出结果:
Date Group days 0 01/01/2023 A 3 1 02/01/2023 A 3 2 03/01/2023 A 3 3 05/01/2023 B 4 4 06/01/2023 B 4 5 07/01/2023 B 4 6 08/01/2023 B 4
内容的提问来源于stack exchange,提问作者Hoàng Phạm Kim
相关产品推荐
相关产品推荐

