在oracle中的特定行之后获取下一行

时间:2015-08-04 20:37:17

标签: sql oracle

我正在试图找到一种可靠地获得下一行的方法。我有以下架构:

id varchar(36),
received_at timestamp(6) with time zone

此查询大部分时间都有效

SELECT *
FROM receipt_emails
WHERE id > '50e8340a-2db5-42c2-add8-81ba732e9123'
ORDER BY RECEIVED_AT ASC
FETCH NEXT 1 ROWS ONLY;

但有时它没有,我不知道为什么。我现在在数据库中有以下2行。

id                                   | received_at
50e8340a-2db5-42c2-add8-81ba732e9123 | "2015-08-04 05:16:13.000000"
4744eb81-9233-462a-8ee6-43302ef85671 | "2015-08-04 05:17:53.000000"

执行上述查询会返回零结果。我希望获得id为4744eb81-9233-462a-8ee6-43302ef85671的行。我有一种感觉,它与查询的where部分有关,没有做我想要的事情。

1 个答案:

答案 0 :(得分:2)

我认为这就是你想要的:

SELECT re.*
FROM receipt_emails re
WHERE received_at > (SELECT received_at
                     FROM receipt_emails re2
                     WHERE re2.id = '50e8340a-2db5-42c2-add8-81ba732e9123'
                    )
ORDER BY RECEIVED_AT ASC
FETCH NEXT 1 ROWS ONLY;

比较应该是时间戳,而不是id。