sql >> Databasteknik >  >> RDS >> Oracle

Oracle SQL:Filtrering efter ROWNUM returnerar inte resultat när det borde

Du kan inte använda rownum så här. rownum beräknas när värdena faktiskt returneras från frågan -- endast när en rad returneras. Därför uttalandet:

where rownum = 2

kommer aldrig att returnera ett värde, eftersom det måste finnas en "1" före en "2".

Om du använder Oracle 12+ kan du använda offset sats med fetch first <n> rows only . I tidigare versioner kan du använda row_number() over () för att beräkna ett radnummer som en kolumn och använda det i where .

Faktiskt använder din fråga redan en underfråga, så du kan göra något som:

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. PLS-00103 skapar en extern tabell med dynamisk SQL

  2. Lägg till nya kolumner i befintlig tabell i en migrering i Laravel

  3. Hitta det refererade tabellnamnet med hjälp av tabell-, fält- och schemanamn

  4. Utför beräkning i MySQL-standardvärde