DB2加入了困难

时间:2013-11-26 14:24:58

标签: join db2 bi-temporal

我有以下情况(简化):

2 BiTemp表

  • basicdata(id,btmp_tsd,name,prename)
  • extendeddata(id,btmp_tsd,basicid,codename,codevalue)

在扩展数据中,一个基本数据可以存在多个条目,每个条目具有不同的代号和值。

我必须创建一个SQL来选择自指定时间以来已更改的所有行。对于basicdata表,这个相对简单:

SELECT ID, BTMP_TSD, NAME, PRENAME
FROM BASICDATA BD
WHERE BTMP_TSD  =
               (SELECT MAX(BTMP_TSD)
                  FROM BASICDATA BD2
                 WHERE BD2.ID             =  BD.PRTNR_ID
                   AND BD2.BTMP_TSD      >  :MINTSD
                   AND BD2.BTMP_TSD      <= :MAXTSD
               )
ORDER BY ID
WITH UR

现在我需要加入第二个表来获取代号'test'的代码值。问题是,它可能不存在,在这种情况下,无论如何都应该收集行。但如果有一行但不在时间范围内,我不应该得到结果。

我希望我能够解释我的问题。加入是我仍然没有看到的事情之一......

编辑: 好的,这是一个样本

basicdata:
id,btmp_tsd,name,prename
1,2013-05-25,test,user
2,2013-06-26,user,two
3,2013-06-26,peter,hans
1,2013-06-20,test,us3r
2,2013-10-30,us3r,two

extendeddata:
id,btmp_tsd,basicid,codename,codevalue
1,2013-05-25,1,superadmin,1
2,2013-06-26,3,admin,1
3,2013-11-25,1,superadmin,0

好了,现在有了这些条目,我想要所有的用户ID自 2013-10-01 后有任何变化

  

User1(因为extendeddata superadmin有变化)

     

User2(如果名称发生变化,我希望他更加强硬,他在扩展数据表上没有条目)

     

不是User3(他在两个表上都有条目,但它不在指定的范围内)

1 个答案:

答案 0 :(得分:0)

以下查询应该执行您想要的操作。

select * 
from basicdata b left outer join extendeddata e on b.id=e.basicid
where b.btmp_tsd >= '2013-10-01'
  or e.btmp_tsd >= '2013-10-01'

免责声明:我没有测试过sql。所以语法可能不是100%完美。