Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何组合多个增量表?_Sql_Sql Server_Database - Fatal编程技术网

Sql 如何组合多个增量表?

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和主要信息的表。我还有两个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
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