gpt4 book ai didi

sql - 如何正确使用Oracle ORDER BY和ROWNUM?

转载 作者:行者123 更新时间:2023-12-03 04:42:13 26 4
gpt4 key购买 nike

我很难将存储过程从 SQL Server 转换为 Oracle,以使我们的产品与其兼容。

我的查询根据时间戳返回某些表的最新记录:

SQL Server:

SELECT TOP 1 *
FROM RACEWAY_INPUT_LABO
ORDER BY t_stamp DESC

=> 这将返回我最新的记录

但是甲骨文:

SELECT *
FROM raceway_input_labo
WHERE rownum <= 1
ORDER BY t_stamp DESC

=> 无论 ORDER BY 语句如何,这都会返回最旧的记录(可能取决于索引)!

我通过这种方式封装了 Oracle 查询以满足我的要求:

SELECT * 
FROM
(SELECT *
FROM raceway_input_labo
ORDER BY t_stamp DESC)
WHERE rownum <= 1

并且它有效。但这对我来说听起来像是一个可怕的黑客,特别是当我在涉及的表中有很多记录时。

实现这一目标的最佳方法是什么?

最佳答案

where 语句在 order by 之前执行。因此,您想要的查询是“获取第一行,然后按 t_stamp desc排序”。这不是你想要的。

子查询方法是在 Oracle 中执行此操作的正确方法。

如果您想要一个适用于两个服务器的版本,您可以使用:

select ril.*
from (select ril.*, row_number() over (order by t_stamp desc) as seqnum
from raceway_input_labo ril
) ril
where seqnum = 1

外部*将在最后一列返回“1”。您需要单独列出列以避免这种情况。

关于sql - 如何正确使用Oracle ORDER BY和ROWNUM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15091849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com