Oracle SQL: Mengekstrak Kuantiti Terkini untuk Setiap ID
Panduan ini menunjukkan cara untuk mendapatkan semula kuantiti terkini dengan cekap untuk setiap ID unik dalam pangkalan data Oracle SQL. Katakan anda mempunyai jadual yang dipanggil "qtys" dengan struktur berikut:
ID
: Pengecam unik untuk setiap rekod.TS
: Cap masa yang menunjukkan bila kuantiti direkodkan.QTY
: Nilai kuantiti.Matlamatnya adalah untuk mendapatkan kuantiti terbaharu (QTY
) dan cap masa yang sepadan (TS
) untuk setiap ID
yang berbeza.
Penyelesaian:
Pertanyaan berikut menggunakan fungsi MAX()
dan klausa GROUP BY
untuk mencapai ini:
<code class="language-sql">SELECT id, MAX(TS) AS "Latest Timestamp", MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS) AS "Latest Quantity" FROM qtys GROUP BY id;</code>
Pertanyaan ini mengumpulkan data mengikut ID
dan kemudian, untuk setiap kumpulan, memilih cap masa maksimum (MAX(TS)
). Yang penting, MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS)
memastikan kuantiti yang dikaitkan dengan cap masa terkini diperoleh, walaupun berbilang entri berkongsi cap masa maksimum yang sama.
Pendekatan Alternatif:
1. Penapisan dalam X Minit Terakhir:
Untuk mengehadkan keputusan kepada entri dalam masa X minit terakhir, masukkan klausa WHERE
:
<code class="language-sql">SELECT id, MAX(TS) AS "Latest Timestamp", MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS) AS "Latest Quantity" FROM qtys WHERE TS > SYSTIMESTAMP - INTERVAL '30' MINUTE GROUP BY id;</code>
Ganti '30' MINUTE
dengan selang masa yang anda inginkan.
2. Menyertai dengan Meja Lain:
Jika anda perlu memasukkan data daripada jadual lain (cth., "nama" dengan lajur idname
), gunakan JOIN
:
<code class="language-sql">SELECT t1.id || '-' || t2.idname AS "ID-IDNAME", MAX(t1.TS) AS "Latest Timestamp", MAX(t1.QTY) KEEP (DENSE_RANK LAST ORDER BY t1.TS) AS "Latest Quantity" FROM qtys t1 JOIN names t2 ON t1.id = t2.id GROUP BY t1.id || '-' || t2.idname;</code>
Ini menggabungkan "qtys" dan "nama" berdasarkan lajur id
dan menggabungkan ID
dan idname
untuk pengecam gabungan. Fungsi MAX()
kemudiannya beroperasi pada data yang dicantumkan. Ingat untuk melaraskan nama jadual dan lajur agar sepadan dengan skema pangkalan data khusus anda.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kuantiti Terkini untuk Setiap ID dalam Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!