我正在试图找到一种可靠地获得下一行的方法。我有以下架构:
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
部分有关,没有做我想要的事情。
答案 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。