0

我有以下情况(简化):

2 个 BiTemp 表

  • basicdata (id, btmp_tsd, name, prename)
  • 扩展数据(id、btmp_tsd、basicid、代号、代号)

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

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

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

好的,现在有了这些条目,我想要所有自2013年 10 月 1 日以来发生任何变化的用户 ID,我应该得到

User1(因为extendeddata superadmin有变化)

User2(更改了名称,我希望他更坚强,他在扩展数据表上没有条目)

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

4

1 回答 1

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

于 2013-11-27T14:02:31.720 回答