sql >> データベース >  >> RDS >> Oracle

オラクルのrownumの謎

    ROWNUM クエリの条件の一部として評価できるという点で奇妙ですが、行がそのフィルタを通過できなかった場合、ROWNUM 割り当てられた値は、次の行で再び使用できるようになります。

    これの重要な効果の1つは、ROWNUMを除外する条件を使用する場合です。 値が1の場合、一致することはありません。この条件に対してテストされる最初の行は行1になります。ただし、テストに失敗するため、次の行は行1と見なされます。など。

    したがって、あなたの状態はROWNUM BETWEEN 2 AND 4 決して真実になることはできません。

    あなたが見つけた回避策は伝統的なものです。もう1つは、分析関数を使用して行をランク付けし、ランクでフィルタリングすることです。例:

    SELECT MI.* FROM (
      SELECT USER_ID,CUSTOMER_NAME, RANK() OVER (ORDER BY CREATION_DATE DESC) AS the_rank
      FROM ELEC_AUTO_MERC 
      ) MI
    WHERE the_rank BETWEEN 2 AND 4;
    

    いくつかの分析関数(RANK、DENSE_RANK、およびROW_NUMBER)をこの目的に使用でき、特に同点の場合、わずかに異なる結果が生成されます。ドキュメントを確認してください。




    1. サーバーの再起動時にMYSQLが自動インクリメント値をリセットしないようにする

    2. Python mysqlクエリから%をエスケープするにはどうすればよいですか?

    3. 不正な指示:Djangoを実行している場合は4

    4. DevOps:DBAまたは開発者–バランスを正しくとる