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

Прилагане на OFFSET и LIMIT в ORACLE за сложни заявки за свързване?

Можете да използвате аналитични функции като ROW_NUMBER() в рамките на подзаявка за Oracle 11g ако приемем, че трябва да класирате редовете между 3-ти и 8-ми, за да уловите OFFSET 3 LIMIT 8 логика в Oracle DB (наистина тези клаузи са включени за версии 12c+ ), когато резултатът трябва да бъде групиран по CREATE_DATE и подредени по ID на отделите :

SELECT q.*
  FROM (SELECT DEPT.ID rowobjid,
               DEPT.CREATOR createdby,
               DEPT.CREATE_DATE createddate,
               DEPT.UPDATED_BY updatedby,
               DEPT.LAST_UPDATE_DATE updateddate,
               DEPT.NAME name,
               DEPT.STATUS status,
               statusT.DESCR statusdesc,
               REL.ROWID_DEPT1 rowidDEPT1,
               REL.ROWID_DEPT2 rowidDEPT2,
               DEPT2.DEPT_FROM_VAL parentcid,
               DEPT2.NAME parentname,
               ROW_NUMBER() OVER (PARTITION BY DEPT.CREATE_DATE ORDER BY DEPT.ID) AS rn
          FROM TEST.DEPT_TABLE DEPT
          LEFT JOIN TEST.STATUS_TABLE statusT
            ON DEPT.STATUS = statusT.STATUS
          LEFT JOIN TEST.C_REL_DEPT rel
            ON DEPT.ID = REL.ROWID_DEPT2
          LEFT JOIN TEST.DEPT_TABLE DEPT2
            ON REL.ROWID_DEPT1 = DEPT2.ID) q
 WHERE rn BETWEEN 3 AND 8;

което връща точно 6 (8-3+1) ред. Ако трябва да включите връзките (равните стойности за идентичности на отдели за всяка дата на създаване), ROW_NUMBER() трябва да се замени с друга прозоречна функция, наречена DENSE_RANK() тъй като всички други части на заявката остават същите. Поне 6 записите ще се върнат в този случай.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Импортирайте XML файл в Oracle XML DB Repository

  2. sqoop експорт от hdfs към oracle Грешка

  3. получаване на грешка при създаване на таблица като ORA-00904::невалиден идентификатор в база данни на oracle sql

  4. Достъп до съединени елементи

  5. SQL Server еквивалент на Bulk Collect в Oracle