Sql 如何组合多个增量表?
我有一个带有ID和主要信息的表。我还有两个delta表,输入ID和更改日期。我需要构建一个视图,将这三个表合并在一起,指示随着时间的推移发生的所有变化 主表:Sql 如何组合多个增量表?,sql,sql-server,database,Sql,Sql Server,Database,我有一个带有ID和主要信息的表。我还有两个delta表,输入ID和更改日期。我需要构建一个视图,将这三个表合并在一起,指示随着时间的推移发生的所有变化 主表: ID Name -- ------------------ 1 Bob Jones 2 Dave Smith 第一个属性表: ID Date Attr1 -- ---------- ----- 1 01/01/2013 25 1 02/15/2013 33 1 02/17/2013 47
ID Name
-- ------------------
1 Bob Jones
2 Dave Smith
第一个属性表:
ID Date Attr1
-- ---------- -----
1 01/01/2013 25
1 02/15/2013 33
1 02/17/2013 47
1 03/02/2013 58
2 02/01/2013 1
...
第二属性表
ID Date Attr2
-- ---------- -----
1 01/01/2013 ABC
1 01/05/2013 DEF
1 01/15/2013 RST
1 02/10/2013 XYZ
1 02/15/2013 Foo
1 03/05/2013 Blah
2 02/01/2013 Two
...
基于该数据,对于Bob Jones,我需要视图返回以下内容:
ID Name Date Attr1 Attr2
-- ----------- ---------- ----- -----
1 Bob Jones 01/01/2013 25 ABC
1 Bob Jones 01/05/2013 25 DEF
1 Bob Jones 01/15/2013 25 RST
1 Bob Jones 02/10/2013 25 XYZ
1 Bob Jones 02/15/2013 33 Foo
1 Bob Jones 02/17/2013 47 Foo
1 Bob Jones 03/02/2013 58 Foo
1 Bob Jones 03/05/2013 58 Blah
我尝试外部连接属性表以获取按日期排序的所有更改值,然后对整个查询本身使用外部连接以获取“先前”记录:
但是,当一个属性表的更改速度快于另一个属性表时,这不起作用,因为没有更改的属性在属性表联接的结果中为null,并且如果两个null背靠背显示,则当我需要该列中最后一个非null值时,合并将返回null
甚至可以在SQL Server 2012的视图中执行此操作吗
with qry as (
select
rownum = ROW_NUMBER() OVER (ORDER BY m.ID, a.DATE),
m.ID,
m.Name,
a.DATE,
a.Attr1,
a.Attr2
from Main m
inner join (
select
COALESCE(a1.ID, a2.ID) as ID,
COALESCE(a1.LOAD_DATE, a2.LOAD_DATE) as LOAD_DATE,
a1.Attr1,
a2.Attr2
from Attributes1 a1
full outer join Attributes2 a2
on (a1.ID = a2.ID and a1.DATE = a2.DATE)
) a on (a.ID = m.ID)
)
select
COALESCE(qry.ID, prev.ID) as ID,
COALESCE(qry.Name, prev.Name) as Name,
COALESCE(qry.DATE, prev.DATE) as DATE,
COALESCE(qry.Attr1, prev.Attr1) as Attr1,
COALESCE(qry.Attr2, prev.Attr2) as Attr2,
from qry
left join qry prev
on (prev.rownum = qry.rownum - 1)
order by ID, DATE