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

基于单日期列生成from_date/to_date行集——客户审计表场景

从审计表提取地址字段的历史有效期记录

现有customer_audit表用于记录customer表的INSERT和UPDATE操作,表结构及数据如下:

idoperationtimestampcustomer_idaddress1address2
1I2024-10-05100link stnumber 1
2U2024-10-06100link stnumber 2
3U2024-10-07100link roadnumber 2
4U2024-10-08100link roadnumber 200
5I2024-10-06200park stnumber 20
6U2024-10-08200park stnumber 200

需求说明

需要针对address1和address2字段,分别展示它们的所有历史值,并基于timestamp列计算对应的生效起始日期(from_date)和失效日期(to_date)。以customer_id=100为例,预期输出如下:

customer_idcolumn_namecolumn_valuefrom_dateto_date
100address1link st2024-10-052024-10-07
100address1link road2024-10-07null(表示当前有效)
100address2number 12024-10-052024-10-06
100address2number 22024-10-062024-10-08
100address2number 2002024-10-08null

实现SQL

我通过调整mcwolf的查询语句完成了需求,针对address1的SQL代码如下:

select customer_id, name, 'address1' as attribute_name, address1 as "attribute_value", min(from_date) as "valid_from", max(to_date) as "valid_to"
from (
select customer_id, 
       name, 
       address1,
       "mod_timestamp" from_date,
         COALESCE(lead("mod_timestamp") over change_window, to_date('99991231', 'yyyymmdd')) to_date,
       ROW_NUMBER () OVER ( PARTITION BY customer_id, address1 ORDER BY mod_timestamp) as rownum
from customer_audit
WINDOW change_window as (PARTITION BY customer_id order by mod_timestamp)   
order by customer_id, mod_timestamp ) a
group by customer_id, name, attribute_name, "attribute_value"
order by customer_id, "valid_from";

若需要同时处理address2字段,可复制上述查询并将所有address1替换为address2,最后用UNION ALL合并两个查询结果,即可得到完整的双字段历史记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:44:54