Oracle SQL: Mengekstrak Kuantiti Terkini untuk Setiap ID
Panduan ini menunjukkan cara untuk mendapatkan semula kuantiti terkini dengan cekap untuk setiap ID unik daripada jadual yang mengandungi data bercap masa dalam Oracle SQL.
Pendekatan teras melibatkan strategi pertanyaan bersarang:
<code class="language-sql">SELECT id, MAX(ts) AS "DATE", MAX(quantity) AS "QUANTITY" FROM ( SELECT id, ts, RANK() OVER (PARTITION BY id ORDER BY ts DESC) AS rnk, quantity FROM your_table_name ) ranked_data WHERE rnk = 1 GROUP BY id;</code>
Pertanyaan ini beroperasi seperti berikut:
Pertanyaan Dalaman (data_peringkat): Subkueri ini menggunakan fungsi tetingkap RANK()
untuk menetapkan kedudukan kepada setiap baris dalam setiap kumpulan id
, disusun mengikut cap waktu (ts
) dalam tertib menurun . Rekod terkini untuk setiap id
menerima pangkat 1.
Pertanyaan Luar: Pertanyaan ini menapis hasil daripada pertanyaan dalam, memilih hanya baris tersebut dengan rnk = 1
(rekod terkini). Ia kemudian mengumpulkan hasil mengikut id
dan menggunakan MAX()
untuk mendapatkan cap masa dan kuantiti yang sepadan. Ambil perhatian bahawa menggunakan MAX(quantity)
dengan GROUP BY id
adalah sesuai dengan mengandaikan bahawa cap waktu terkini juga membayangkan kuantiti terkini; jika mungkin terdapat berbilang baris dengan cap masa terkini yang sama tetapi kuantiti yang berbeza, kaedah pengagregatan yang berbeza mungkin diperlukan (seperti FIRST_VALUE
dalam pertanyaan yang lebih kompleks).
Penambahan:
1. Penapisan Berasaskan Masa: Untuk mengehadkan hasil pada tetingkap masa tertentu (mis., XX minit terakhir), tambah klausa WHERE
pada pertanyaan dalaman:
<code class="language-sql">WHERE ts >= SYSTIMESTAMP - INTERVAL 'XX' MINUTE</code>
2. Menyertai dengan Jadual Lain: Untuk memasukkan data daripada jadual lain (mis., id_table
dengan maklumat ID tambahan), gunakan JOIN
dalam pertanyaan luar:
<code class="language-sql">SELECT id || '-' || idname AS "ID-IDNAME", MAX(ts) AS "DATE", MAX(quantity) AS "QUANTITY" FROM ( SELECT id, ts, RANK() OVER (PARTITION BY id ORDER BY ts DESC) AS rnk, quantity FROM your_table_name ) ranked_data INNER JOIN id_table ON ranked_data.id = id_table.id WHERE rnk = 1 GROUP BY id || '-' || idname;</code>
Ingat untuk menggantikan your_table_name
dan id_table
dengan nama jadual sebenar anda. Pendekatan yang diperhalusi ini menyediakan penyelesaian yang teguh dan fleksibel untuk mendapatkan semula data kuantiti terbaharu dalam Oracle SQL.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kuantiti Terkini setiap ID dan Cap Masa dalam Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!