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:如何创建事件历史表的完整列表?的主要内容,如果未能解决你的问题,请参考以下文章

oracle 中怎样查看以前执行过的SQL语句?

如何查询oracle表的操作日志记录

创建返回具有复杂 SQL 的表的 Oracle 视图或过程,是不是可能以及如何?

【求助】oracle中sql语句 此列列表已索引的解决办法

Oracle PL/SQL 如何创建列表列表

ORACLE 创建表的SQL语句