Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Kuantiti Terkini setiap ID dan Cap Masa dalam Oracle SQL?

Bagaimana untuk Mendapatkan Kuantiti Terkini setiap ID dan Cap Masa dalam Oracle SQL?

Mary-Kate Olsen
Lepaskan: 2025-01-21 15:42:09
asal
292 orang telah melayarinya

How to Retrieve the Latest Quantity per ID and Timestamp in Oracle SQL?

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>
Salin selepas log masuk

Pertanyaan ini beroperasi seperti berikut:

  1. 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.

  2. 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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan