You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake技术需求:按起止日期拆分记录为每日单条数据

按日期范围拆分单条记录为每日条目

以下是针对不同场景的实用解决方案:

方法1:SQL(以SQL Server为例)

通过递归CTE生成日期范围,关联原记录拆分出每日条目:

WITH DateRange AS (
    -- 初始行:提取原记录的起始日期(仅保留日期部分)
    SELECT 
        ID,
        Name,
        CAST(Start_date AS DATE) AS SplitDate,
        End_date
    FROM YourTable
    WHERE ID = '001' -- 定位要拆分的目标记录
    UNION ALL
    -- 递归生成后续日期,直到达到结束日期
    SELECT 
        ID,
        Name,
        DATEADD(DAY, 1, SplitDate),
        End_date
    FROM DateRange
    WHERE SplitDate < CAST(End_date AS DATE)
)
SELECT 
    ID,
    Name,
    SplitDate AS Date
FROM DateRange
ORDER BY SplitDate
OPTION (MAXRECURSION 0); -- 关闭递归次数限制,适配长日期范围

执行后会输出从2023-04-01到2023-06-30的所有每日记录,自动去除原日期的时分秒部分。

方法2:Python脚本(Pandas)

适合用Python处理本地数据的场景:

import pandas as pd

# 原记录数据
original_data = {
    'ID': ['001'],
    'Name': ['Record1'],
    'Start_date': ['2023-04-01 00:00:00.000'],
    'End_date': ['2023-06-30 00:00:00.000']
}

df = pd.DataFrame(original_data)

# 转换日期格式,仅保留日期部分
df['Start_date'] = pd.to_datetime(df['Start_date']).dt.date
df['End_date'] = pd.to_datetime(df['End_date']).dt.date

# 定义拆分函数:为单条记录生成所有日期对应的条目
def expand_single_record(row):
    date_sequence = pd.date_range(start=row['Start_date'], end=row['End_date'], freq='D')
    return pd.DataFrame({
        'ID': [row['ID']] * len(date_sequence),
        'Name': [row['Name']] * len(date_sequence),
        'Date': date_sequence.date
    })

# 执行拆分并合并结果
split_result = pd.concat([expand_single_record(row) for _, row in df.iterrows()], ignore_index=True)

# 验证输出(可选)
print(split_result.head())
# 导出到CSV(可选)
# split_result.to_csv('daily_records.csv', index=False)

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:42:45