- 我尝试过重新组织问题和答案。请不要标记为重复,前面的问题有一个答案(它没有工作),因此我没有删除它 * 我有一个表ANC_PER_ABS_ENTRIES,它具有以下详细信息-
| 每个_AB_条目_标识|人员编号|动作类型|持续时间|开始日期|结束日期|最后更新日期|
| - -|- -|- -|- -|- -|- -|- -|
| 十五个|一百零一|插入|三个|2022年1月10日|2022年10月3日|2022年11月2日下午4:59:43|
| 十五个|一百零一|更新|一个|2022年1月10日|2022年1月10日|2022年11月2日10时59分43秒|
| 十六岁|一百零二|插入|四个|2022年2月10日|2022年5月10日|2022年11月1日上午10时59分43秒|
| 十七岁|一百零三|插入|四个|2022年2月10日|2022年5月10日|2022年11月2日10时59分43秒|
| 十七岁|一百零三|删除了|四个|2022年2月10日|2022年5月10日|2022年11月2日22时59分43秒|
| 十七岁|一百零三|插入|四个|2022年2月10日|2022年5月10日|2022年11月2日23时59分43秒|
此表是一个历史记录表,类似- insert update和delete这样的操作在此表中被跟踪。我希望创建一个查询,通过比较last_update_date
,只选取此表中的更改。
例如,对于per_ab_entry_id
--〉15的person_number
101,首先插入action_type
,然后更新它,并更改end_date
。
因此,在第一次运行中,选取第一行,在第二次运行中,仅应选取更新的action_type
。
在删除的情况下,即对于person_number
103,在第一次运行中选取的插入记录已被删除,因此应在下一次运行中选取。
如何使用滞后函数来检查上次运行的最后更新日期,并检查start_date
和end_Date
中是否有任何变化,如果有插入/更新/删除,我应该返回最新的行。如果是删除,我应该发送删除的行,如果是为同一个per_ab_entry_id
创建的新行,我也应该返回。
在最近一次运行中,输出应如下所示-
| 每个_AB_条目_标识|人员编号|动作类型|持续时间|开始日期|结束日期|最后更新日期|
| - -|- -|- -|- -|- -|- -|- -|
| 十五个|一百零一|更新|一个|2022年1月10日|2022年1月10日|2022年11月2日10时59分43秒|
| 十六岁|一百零二|插入|四个|2022年2月10日|2022年5月10日|2022年11月1日上午10时59分43秒|
| 十七岁|一百零三|删除了|四个|2022年2月10日|2022年5月10日|2022年11月2日22时59分43秒|
| 十七岁|一百零三|插入|四个|2022年2月10日|2022年5月10日|2022年11月2日22时59分43秒|
我已经尝试了下面的查询,但它没有给出任何输出-
with anc as
(
select person_number,
absence_type,
ABSENCE_STATUS,
approval_status_cd,
start_date,
end_date,
duration,
PER_AB_ENTRY_ID,
AUDIT_ACTION_TYPE_,
row_number() over (order by PER_AB_ENTRY_ID, LAST_UPD_DT) rn
from ANC_PER_ABS_ENTRIES
)
select N1.person_number,
N1.absence_type,
N1.ABSENCE_STATUS,
N1.approval_status_cd,
N1.start_date,
N1.end_date,
N1.duration,
N1.PER_AB_ENTRY_ID,
N1.action_type
from anc N1,
ANC N2
WHERE
N1.PER_AB_ENTRY_ID = N2.PER_AB_ENTRY_ID
and n1.rn + 1 = n2.rn
AND ( n1.start_date <> n2.start_date
or n1.end_date <> n2.end_date
or n1.DURATION <> n2.DURATION)
MATCH_RECOGNISE由于数据库错误而无法工作
1条答案
按热度按时间a5g8bdjr1#
| 每个_AB_条目_标识|人员编号|动作类型|持续时间|开始日期|结束日期|最后更新日期|
| - -|- -|- -|- -|- -|- -|- -|
| 十五个|一百零一|更新|一个|2020年1月1022.00.00.000000日|2020年1月10日22.00.00.00000| 2022年11月2日10时59分43秒|
| 十六岁|一百零二|插入|四个|2020年2月1022.00.00.000000日|2000年5月10日|2022年11月1日上午10时59分43秒|
| 十七岁|一百零三|删除了|四个|2020年2月1022.00.00.000000日|2000年5月10日|2022年11月2日22时59分43秒|
| 十七岁|一百零三|插入|四个|2020年2月1022.00.00.000000日|2000年5月10日|2022年11月2日23时59分43秒|
Fiddle