Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle SQL:Филтрирането по ROWNUM не връща резултати, когато трябва

Не можете да използвате rownum като този. rownum се изчислява, когато стойностите действително се връщат от заявката -- само когато се връща ред. Следователно твърдението:

where rownum = 2

никога няма да върне стойност, защото трябва да има "1" преди "2".

Ако използвате Oracle 12+, можете да използвате offset клауза с fetch first <n> rows only . В по-стари версии можете да използвате row_number() over () за да изчислите номер на ред като колона и да го използвате в where .

Всъщност вашата заявка вече използва подзаявка, така че можете да направите нещо като:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Миграция на данни между различни СУБД

  2. Използване на клаузата IN с низ, разделен със запетая, от изхода на функция replace() в Oracle SQL

  3. База данни:Конвейерни функции

  4. Генерирайте XML файл с персонализирани XML тагове от таблицата на базата данни на oracle

  5. Изберете всеки ред и го вмъкнете в друга таблица