Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih 10 Rekod Oracle Teratas Walaupun Tidak Termasuk Tarikh Tertentu?

Bagaimana untuk Memilih 10 Rekod Oracle Teratas Walaupun Tidak Termasuk Tarikh Tertentu?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-18 15:36:10310semak imbas

How to Select the Top 10 Oracle Records While Excluding Specific Dates?

Pemilihan Rekod 10 Teratas Oracle dengan Pengecualian Tarikh

Artikel ini menangani cabaran pangkalan data Oracle biasa: mendapatkan semula 10 rekod teratas yang dipesan mengikut lajur tertentu, pada masa yang sama mengecualikan rekod yang sepadan dengan kriteria tertentu daripada jadual lain. SELECT DISTINCT mudah dengan klausa ORDER BY dan ROWNUM tidak akan mencukupi kerana interaksi unsur-unsur ini.

Penyelesaian menggunakan subkueri untuk mencapai hasil yang diinginkan:

<code class="language-sql">SELECT *
FROM (
  SELECT DISTINCT 
  APP_ID, 
  NAME, 
  STORAGE_GB, 
  HISTORY_CREATED, 
  TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE  
  FROM HISTORY 
  WHERE 
    STORAGE_GB IS NOT NULL 
    AND NOT EXISTS (
      SELECT 1
      FROM HISTORY h2
      WHERE 
        h2.APP_ID = HISTORY.APP_ID
        AND TO_CHAR(h2.HISTORY_DATE, 'DD.MM.YYYY') ='06.02.2009'
    )
  ORDER BY STORAGE_GB DESC
)
WHERE 
  ROWNUM <= 10;</code>

Pendekatan ini menapis dahulu jadual HISTORY dalam pertanyaan dalam. Klausa NOT EXISTS dengan cekap mengecualikan rekod yang APP_ID sepadan dengan rekod dengan HISTORY_DATE bersamaan dengan '06.02.2009'. Keputusan kemudiannya dipesan dengan STORAGE_GB (menurun). Pertanyaan luar menggunakan kekangan ROWNUM <= 10, memastikan hanya 10 rekod teratas dikembalikan. Kaedah ini menggunakan had baris dengan betul selepas penapisan dan pesanan, menjamin hasil yang tepat.

Nota: NOT EXISTS secara amnya menawarkan prestasi yang lebih baik daripada NOT IN untuk jenis pengecualian ini, terutamanya dengan set data yang besar. Rujuk dokumentasi Oracle untuk strategi pengoptimuman prestasi selanjutnya.

Atas ialah kandungan terperinci Bagaimana untuk Memilih 10 Rekod Oracle Teratas Walaupun Tidak Termasuk Tarikh Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn