sql >> Databáze >  >> RDS >> Oracle

Oracle SQL:Filtrování podle ROWNUM nevrací výsledky, když by mělo

Nemůžete použít rownum takhle. rownum se vypočítá, když jsou hodnoty skutečně vráceny z dotazu - pouze když je vrácen řádek. Proto tvrzení:

where rownum = 2

nikdy nevrátí hodnotu, protože před "2" musí být "1".

Pokud používáte Oracle 12+, můžete použít offset klauzule s fetch first <n> rows only . V dřívějších verzích můžete použít row_number() over () vypočítat číslo řádku jako sloupec a použít jej v where .

Ve skutečnosti váš dotaz již používá dílčí dotaz, takže můžete udělat něco jako:

select *
from (select . . .,
             row_number() over (order by Request_ID, Actual_Start_Date) as rn
      . . .
     ) t
WHERE rn < (1000000 * to_Number(:X) and)
      rn >= (1000000 * (to_Number(:X)-1))


  1. ORA-01861:literál neodpovídá formátovacímu řetězci

  2. Jak vytvořit kontingenční tabulku v Laravelu

  3. Minimální protokolování pomocí INSERT…SELECT do tabulek haldy

  4. Vraťte počet ovlivněných řádků z MERGE pomocí cx_oracle