2013-10-24 66 views
0

我想比较不同表格中的时间戳。我想要得到tbl_1中的标记比tbl_2中的MAX(标记)大的所有行。比较来自不同表格的两个时间戳

select * 
from tbl_1 
where timestamp > (select MAX(TIMESTAMP) from tbl_2); 

不幸的是,这是行不通的。我总是得到零结果:/。两个colums的数据类型是日期/时间


好的我发现了这个问题。

的问题是,如果tbl_2是空的,也没有日期,它不会返回任何东西。当我输入一个更小的日期时它可以工作。

+0

你确定你有满足行那种状况? – mucio

+0

这对我来说很合适http://www.sqlfiddle.com/#!4/43458/2 –

回答

1

返回NULL在回答笔者的回答这个问题......

你可以使用NVL考虑到子查询返回NULL的可能性(当tbl_2为空):

select * 
    from tbl_1 
where timestamp > NVL((select MAX(TIMESTAMP) from tbl_2), timestamp - 1); 
1

我发现做手动比较有帮助。运行查询

select MAX(TIMESTAMP) from tbl_2 

,看看它的日期是日期比任何日期长大了,你有tbl_1

select MAX(TIMESTAMP) from tbl_1 

如果是的话,解释为什么你没有得到一个结果,你会必须查看那些大的时间戳以确定记录是否需要更改。

为了得到这个工作,甚至返回所有行,当你为MAX(TIMESTAMP)查询中tbl_2

select * 
from tbl_1 
where timestamp > (select MAX(TIMESTAMP) from tbl_2) or (select MAX(TIMESTAMP) from tbl_2) is null;