sql >> Database teknologi >  >> RDS >> Oracle

Oracle SQL:Filtrering efter ROWNUM returnerer ikke resultater, når det skal

Du kan ikke bruge rownum sådan her. rownum beregnes, når værdierne faktisk returneres fra forespørgslen -- kun når en række returneres. Derfor udsagnet:

where rownum = 2

vil aldrig returnere en værdi, fordi der skal være et "1" før et "2".

Hvis du bruger Oracle 12+, kan du bruge offset klausul med fetch first <n> rows only . I tidligere versioner kan du bruge row_number() over () at beregne et rækkenummer som en kolonne og bruge det i where .

Faktisk bruger din forespørgsel allerede en underforespørgsel, så du kan gøre noget 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. Sådan fungerer DB_NAME() i SQL Server

  2. Kan vi bruge DDL-kommandoer i en forberedt erklæring (PostgreSQL)?

  3. Escape-funktion til regulære udtryk eller LIKE-mønstre

  4. SequelizeConnectionError:selvsigneret certifikat