高效使用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中文網其他相關文章!