5

結果セットの最初の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;
4

1 に答える 1

1

私はあなたの解決策は大丈夫だと思います。Oracleを使用する他の唯一の解決策は、row_number()分析関数を使用することですが、これにより、エレガントさが低下します。他のデータベースにはステートメントがありますが、使用中のサブクエリの外部以外TOP 1にそれに相当するOracleはありません。読みやすくするために使用することに同意します。以下はもっと速く書かれるかもしれませんが、それがもっとエレガントかどうかはわかりません。多分好みの問題:ROWNUMORDER BYWITH

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®DatabaseSQL言語リファレンス11gリリース2(11.2)E26088-01

于 2012-09-18T18:04:23.447 に答える