我有一个表,其中包含两个地址的审计数据-
ADDRESS_ID EFFECTIVE_START_DATE EFFECTIVE_END_DATE ADDRESS_LINE_1 ADDRESS_LINE_2 TOWN Person_id
300000009360612 2020-04-01 4712-12-31 Box 14 ADAM SELLERS ST Mirror 157
300000009360612 2000-03-27 2020-03-31 Box 13 Mirror 157
我要更改的列的上一个值和当前值。例如,输出应该如下所示-
ADDRESS_ID Changed Attribute Previous_Value Current_Value
300000009360612 Effective_start_Date 2000-03-27 2020-04-01
300000009360612 Effective_end_Date 2020-03-31 4712-12-31
300000009360612 ADDRESS_LINE_1 Box 13 Box 14
300000009360612 ADDRESS_LINE_2 ADAM SELLERS ST
我试过了-
select * from (
SELECT
address_id ,
'Effective_Start_Date' Changed_Attribute ,
cast(Effective_Start_Date as varchar(40)) current_value
, LAG(cast(effective_start_date as varchar(40)), 1, 0) OVER (partition by address_ID, effective_start_date ORDER BY last_update_date) Previous_Value
FROM fusion.per_addresses_f_
ORDER BY last_update_date DESC)
where current_value <> Previous_Value
上面的查询没有给出正确的输出。它给了我下面的输出-
address_id Changed_Attribute current_value Previous_Value
300000009360612 Effective_start_Date 2020-04-01
i、 我没有得到任何价值在以前的价值。
4条答案
按热度按时间edqdpe6u1#
wz1wpwve2#
可以使用行数而不是延迟=
55ooxyrt3#
您可以为每一行生成6行
ADDRESS
比较如下:nimxete24#
使用上次更新日期来决定哪条记录是第一条记录。。。
给予
注:val1=以前的值,val2=当前值(基于上次更新日期)