0

我想比较来自不同表的时间戳。我想获取 tbl_1 中的标记大于 tbl_2 中的 MAX(stamp) 的所有行。

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

不幸的是,这不起作用。我总是得到零结果:/。两列的数据类型都是日期/时间


好的,我发现了问题。

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

4

2 回答 2

1

从作者的回答中回答问题...

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

select *
  from tbl_1
where timestamp > NVL((select MAX(TIMESTAMP) from tbl_2), timestamp - 1);
于 2013-10-24T14:32:23.337 回答
1

我发现进行手动比较会有所帮助。运行您的查询

select MAX(TIMESTAMP) from tbl_2

并查看其中的日期是否比您在 tbl_1 中的任何日期大

select MAX(TIMESTAMP) from tbl_1

如果是这样,这就解释了为什么您没有得到结果,您将不得不查看那些大时间戳以确定是否需要更改记录。

为了使它工作以返回所有行,即使您为 tbl_2 中的 MAX(TIMESTAMP) 查询返回 NULL

select *
from tbl_1
where timestamp > (select MAX(TIMESTAMP) from tbl_2) or (select MAX(TIMESTAMP) from tbl_2) is null;
于 2013-10-24T13:25:00.153 回答