高效使用 Oracle ORDER BY 和 ROWNUM
在 Oracle 中,ROWNUM 伪列提供了一种从结果集中检索特定行的方法他们的顺序。但是,将 ROWNUM 与 ORDER BY 一起使用可能会导致意外结果。
要从表中检索最新记录,SQL Server 中通常使用以下 SQL 查询:
SELECT TOP 1 * FROM RACEWAY_INPUT_LABO ORDER BY t_stamp DESC
但是,在 Oracle 中,将此方法与 ROWNUM 一起使用,如以下查询所示:
SELECT * FROM raceway_input_labo WHERE rownum <= 1 ORDER BY t_stamp DESC
将检索最旧的记录而不是最新的记录。这是因为在 Oracle 中,ROWNUM 在 ORDER BY 之前计算。
要使用 Oracle 的 ROWNUM 有效检索最新记录,请使用子查询,如下所示:
SELECT * FROM (SELECT * FROM raceway_input_labo ORDER BY t_stamp DESC) WHERE rownum <= 1
此子查询方法可确保 ORDER首先应用 BY,从而产生所需的输出。
或者,可以使用更通用的解决方案,可以在 SQL Server 和 SQL Server 中使用Oracle可以使用row_number()函数来实现:
select ril.* from (select ril.*, row_number() over (order by t_stamp desc) as seqnum from raceway_input_labo ril ) ril where seqnum = 1
以上是如何使用'ORDER BY”和'ROWNUM”高效地从 Oracle 表中检索顶行?的详细内容。更多信息请关注PHP中文网其他相关文章!