我有以下情况(简化):
2 BiTemp表
在扩展数据中,一个基本数据可以存在多个条目,每个条目具有不同的代号和值。
我必须创建一个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(他在两个表上都有条目,但它不在指定的范围内)
答案 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%完美。