Oracle SQL:如何创建事件历史表的完整列表?
Posted
技术标签:
【中文标题】Oracle SQL:如何创建事件历史表的完整列表?【英文标题】:Oracle SQL: How to create a full list of event history table? 【发布时间】:2020-10-27 14:44:45 【问题描述】:我有两张桌子用于这项工作。
表 1 包括从 2019 年 1 月 1 日到 2019 年 12 月 31 日的所有天数(365 条记录)。
DATE
1/1/2019
1/2/2019
...
12/31/2019
表 2 包括两个不同 ID 的事件日期和描述
ID EVENT_DATE EVENT_DESC
1 1/5/2019 APPLIED
1 2/1/2019 APPROVED
2 1/22/2019 APPLIED
2 2/11/2019 DENIED
如何创建新的事件历史表:
DATE ID EVENT_DESC
1/1/2019 NULL NULL
..
1/5/2019 1 APPLIED
1/6/2019 1 APPLIED
..
1/22/2019 1 APPLIED
1/22/2019 2 APPLIED
..
2/1/2019 1 APPROVED
2/1/2019 2 APPLIED
..
【问题讨论】:
您好,我不确定您的需求,但这样做会在您的数据库中引入大量重复数据。 【参考方案1】:这是你想要的吗?
select d.date, i.id,
lag(t.event_desc ignore nulls, 1, t.event_desc) over(partition by i.id order by d.date) event_desc
from table1 d
cross join (select distinct id from table2) i
left join table2 t on t.event_datae = d.date and t.id = i.id
基本上,这会为每个 id 和每个日期生成一行。当该特定日期有事件时,将显示该事件,否则将显示最后一个可用事件。
【讨论】:
以上是关于Oracle SQL:如何创建事件历史表的完整列表?的主要内容,如果未能解决你的问题,请参考以下文章