1

我需要使用同一张表的过去版本来更新具有过去缺失信息的表。需要进行更新,因为最近的表格中不再提供一些较早的信息。让 tableA 是 time0 的 table,tableB 是 time1 的 table,依此类推。我真正感兴趣的是最后更新的表格。

到目前为止,我已经尝试过这种方法;

create view _tableB
select * 
from tableA 
union 
select * 
from tableB a 
where a.id not in (select id from tableA);

然后我继续:

create view _tableC
select *
from _tableB
union 
select *
from tableC a
where a.id not in (select id from _tableB); 

依此类推,直到我到达我创建表格的决赛桌。

create table _tableT 
select * 
from _tableS 
union 
select * 
from tableT a
where a.id not in (select id from _tableS); 

你看到这里有更好的东西吗?

PS:我不得不提到,对于每个观察,我可以有多种语言。信息是这样的

id|lguage1|lguage2|lguage3|

我用一个视图和这个方法把它放在了wide2long上。

id1|lguage1 
id1|lguage2 
id1|lguage3
id2|lguage1

信息不按 id 和语言排序。
谢谢。

4

1 回答 1

1

给定几个假设,您可以大大简化:
1. 每个单独的数据集没有重复的 ID。
2. 每个数据集按 ID 排序。

然后你只需这样做: data RESULT; 设置_tableS ... _tableC _tableB _table;按身份证;如果是第一个.id;跑;

这样,代码更紧凑,所有数据只读取一次。它将读取所有表格并输出交织的结果(即:结果也将按 ID 排序)

firs.id 过滤器意味着他只会保留他遇到的每个 id 值的第一条记录。由于数据集是最先提到的,因此他将获取每个 ID 可用的最新记录并放弃其他记录。

于 2013-08-26T16:43:36.433 回答