簡體   English   中英

Oracle:獲取前n個記錄(top-k查詢)的優雅方式

[英]Oracle: An elegant way to take the first n record (top-k query)

假設我們想要獲取結果集的前1條記錄。 有更優雅的方式嗎?

   WITH temp
        AS (  SELECT WKFC_CRONOLOGIA_ID
                FROM SIUWKF.WKF_CRONOLOGIA c
               WHERE     Ogg_oggetto_id = vOGG_ID
                     AND TOG_TIPO_OGGETTO_ID = vTOG
                     AND C.WKFC_DATA_FIN = TO_DATE ('31/12/9999', 'DD/MM/YYYY')
                     AND Wkfc_Tipo = 'STATO'
            ORDER BY WKFC_DATA_INI DESC)
   SELECT WKFC_CRONOLOGIA_ID
     INTO vCRONOLOGIA_ID
     FROM temp
    WHERE ROWNUM = 1;

我認為你的解決方案沒問題。 Oracle的唯一其他解決方案是使用row_number()分析函數,但這使它不那么優雅。 其他數據庫具有TOP 1語句,但是當您使用ORDER BY在子查詢之外沒有其他Oracle等效於ROWNUM 我同意使用WITH使其更具可讀性。 以下可能寫得更快,但我不確定它是否更優雅。 也許是品味問題:

SELECT * FROM
(  SELECT WKFC_CRONOLOGIA_ID
                FROM SIUWKF.WKF_CRONOLOGIA c
               WHERE     Ogg_oggetto_id = vOGG_ID
                     AND TOG_TIPO_OGGETTO_ID = vTOG
                     AND C.WKFC_DATA_FIN = TO_DATE ('31/12/9999', 'DD/MM/YYYY')
                     AND Wkfc_Tipo = 'STATO'
            ORDER BY WKFC_DATA_INI DESC)
WHERE ROWNUM = 1

這就是Oracle SQL手冊中關於ROWNUM和前N個報告的內容,並確認了您的方法。

在此輸入圖像描述

源Oracle®數據庫SQL語言參考11g第2版(11.2)E26088-01

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM