2013-11-26 76 views
0

我有以下的情况(简体):DB2连接困难

2双温表

  • basicdata(ID,btmp_tsd,姓名,女士prename)
  • extendeddata(ID,btmp_tsd,basicid,代号,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 

现在我需要加入第二台获得了代号为“测试”的codevalue。问题是,它可能不存在,在这种情况下,无论如何应该收集该行。但是如果有一行但不在时间范围内,我不应该得到结果。

我希望我能解释我的问题。加入是的事情,我还没有看到一个低谷......

编辑: 好这里是一个样本

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月1日我应该得到

用户1(因为extendeddata超级管理员有变化)

用户2(有一个名字昌e和我想他甚至强硬,他对extendeddata表中没有条目)

没有用户3(他有两个表的条​​目,但它不是在指定的范围内)

+0

您可以添加一些示例数据和预期结果吗? –

+0

我添加了一些示例数据和我期望的内容 – Xavjer

回答

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%完美。

+0

问题是,由于表是双时间的,这不会像这样简单 – Xavjer