Sql Oracle管理历史信息和新条目

Sql Oracle管理历史信息和新条目,sql,oracle,Sql,Oracle,我有一个每周获取刷新数据的查询。我想将新数据添加到包含历史记录的表中,并确定条目是否是新的 例如: 表1: col value --- ----- c1 v1 c2 v1 c5 v5 表1历史记录: date col value new_entry ---- --- ----- --------- 02/06/2021 c1 v1 NO 02/06/2021 c2

我有一个每周获取刷新数据的查询。我想将新数据添加到包含历史记录的表中,并确定条目是否是新的

例如:

表1:

col  value
---  -----
c1      v1
c2      v1
c5      v5
表1历史记录:

date           col  value  new_entry
----           ---  -----  ---------
02/06/2021     c1      v1         NO
02/06/2021     c2      v2         NO
02/06/2021     c3      v3        YES
01/06/2021     c1      v1        YES
01/06/2021     c2      v2        YES
01/06/2021     c4      v4        YES
预期产出:

date           col  value  new_entry   explanation
----           ---  -----  ---------   -----------
03/06/2021     c1      v1         NO   C1 entry already existed on 02/06/2021
03/06/2021     c2      v2         NO   C2 entry already existed on 02/06/2021
03/06/2021     c5      v5        YES   C5 entry did not exist on 02/06/2021
02/06/2021     c1      v1         NO   C1 entry already existed on 01/06/2021
02/06/2021     c2      v2         NO   C2 entry already existed on 01/06/2021
02/06/2021     c3      v3        YES   C3 entry did not exist on 01/06/2021
01/06/2021     c1      v1        YES   First c1 entry ever
01/06/2021     c2      v2        YES   First c2 entry ever
01/06/2021     c4      v4        YES   First c4 entry ever

您可以首先从
table1
中选择行,分别添加日期列,并从
table1\u hist
中选择具有子查询值的new\u条目,然后使用
union all
将结果与
table1\u hist
的现有行组合

 create table table1(col varchar(50),  value varchar(50));
 insert into table1 values('c1',      'v1');
 insert into table1 values('c2',      'v1');
 insert into table1 values('c5',      'v5');     
 
 create table table1_hist(dates date, col varchar(50),  value varchar(50),  new_entry varchar(50));
 insert into table1_hist values(date '2021-06-02',     'c1',      'v1',         'NO');
 insert into table1_hist values(date '2021-06-02',     'c2',      'v2',         'NO');
 insert into table1_hist values(date '2021-06-02',     'c3',      'v3',        'YES');
 insert into table1_hist values(date '2021-06-01',     'c1',      'v1',        'YES');
 insert into table1_hist values(date '2021-06-01',     'c2',      'v2',        'YES');
 insert into table1_hist values(date '2021-06-01',     'c4',      'v4',        'YES');     
查询:

 select date '2021-06-03' dates,col,value,
 (case when exists(select 1 from table1_hist th where th.col=t.col)  then 'NO' else 'YES' end )new_entry
 from table1 t
 union all
 select * from table1_hist
输出: 日期 上校 价值 新项目 03-6-21 c1 v1 不 03-6-21 c2 v1 不 03-6-21 碳五 v5 对 02-JUN-21 c1 v1 不 02-JUN-21 c2 v2 不 02-JUN-21 c3 v3 对 01-JUN-21 c1 v1 对 01-JUN-21 c2 v2 对 01-JUN-21 补体第四成份 v4 对
逻辑不清晰,请为您想要的内容提供清晰的解释output@eshirvana请在我的预期输出中找到我的解释。仍然不清楚,例如2021年6月1日c5、v5不存在,2021年6月2日我只想比较前一天。C5在2021年6月2日不存在,这就是为什么我把它作为新的。非常感谢!!!不客气。最美好的祝福。