Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取oracle中特定行之后的下一行_Sql_Oracle - Fatal编程技术网

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

Sql 获取oracle中特定行之后的下一行,sql,oracle,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; 但有时候不是,我不知道为什么。现在数据库中有以下两行

我在想办法可靠地排到下一排。我有以下模式:

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;
但有时候不是,我不知道为什么。现在数据库中有以下两行

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
部分没有实现我的意图有关

我想这就是你想要的:

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。

当您请求大于
50e8…
的行时,为什么希望得到
4744…
?与@Blorgbeard相同。字符串比较工作正常,但您的两个字符串id不在序列中,因此where id>。。。条款将第二行取消。您需要在>处对接收的\u进行测试…在字符字段的ASCII排序序列中,以“4”开头的ID位于您请求的以“5”开头的ID之前,因此,您得到的结果为零。我认为您缺少的可能是,
orderby
没有修改where子句中
的行为。您可以将其想象为“首先获取ID>xxx的行,然后按yyy排序这些行”。不是“按yyy排序时,获取ID为xxx的行之后的行”。