Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Terapkan OFFSET dan LIMIT di ORACLE untuk Query Gabung yang kompleks?

Anda dapat menggunakan fungsi Analitik seperti ROW_NUMBER() dalam subquery untuk Oracle 11g dengan asumsi Anda perlu mendapatkan peringkat baris antara 3 dan 8 untuk menangkap OFFSET 3 LIMIT 8 logika dalam Oracle DB(memang klausa tersebut disertakan untuk versi 12c+ ), kapan pun hasilnya harus dikelompokkan berdasarkan CREATE_DATE dan diurutkan berdasarkan ID departemen :

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;

yang mengembalikan persis 6 (8-3+1) baris. Jika Anda perlu menyertakan ikatan (nilai yang sama untuk identitas departemen untuk setiap tanggal pembuatan), ROW_NUMBER() harus diganti dengan fungsi jendela lain yang disebut DENSE_RANK() karena semua bagian kueri lainnya tetap sama. Setidaknya 6 catatan akan kembali dalam kasus ini.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ActiveMQ 5.8:Tidak dapat memuat kelas driver JDBC 'Oracle.jdbc.driver.OracleDriver'

  2. Perbarui beberapa baris menggunakan CASE WHEN - ORACLE

  3. Pernyataan FORALL Dengan Klausa Terikat VALUES-OF Dalam Database Oracle

  4. Oracle menghasilkan baris jadwal dengan interval

  5. Mengelola Armada CDB di Oracle Database 18c