Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Rekod Terkini dengan Cekap untuk Setiap Kaedah dan ID dalam MySQL dan PostgreSQL?

Bagaimana untuk Mendapatkan Rekod Terkini dengan Cekap untuk Setiap Kaedah dan ID dalam MySQL dan PostgreSQL?

Patricia Arquette
Patricia Arquetteasal
2024-12-21 17:33:11349semak imbas

How to Efficiently Retrieve the Most Recent Records for Each Method and ID in MySQL and PostgreSQL?

Mengambil semula Rekod Terkini daripada Jadual MySQL

Masalah:

Jadual MySQL menyimpan respons kepada pelbagai RPC panggilan dengan medan untuk cap masa, kaedah, ID dan respons. Matlamatnya ialah untuk mendapatkan semula respons terbaharu untuk semua gabungan kaedah dan ID.

Andaian:

  • Untuk setiap tarikh, boleh ada satu respons untuk kaedah/ID tertentu.
  • Tidak semua gabungan panggilan semestinya ada untuk sesuatu tarikh.
  • Terdapat banyak kaedah, beribu-ribu ID dan sekurang-kurangnya 365 tarikh berbeza.

Penyelesaian:

Pertanyaan berikut boleh digunakan untuk mendapatkan hasil yang diingini dengan cekap dengan menggunakan pembolehubah MySQL untuk mengelakkan a JOIN:

SELECT * FROM (
    SELECT *, if(@last_method=method,0,1) as new_method_group, @last_method:=method 
    FROM rpc_responses 
    ORDER BY method, timestamp DESC
) as t1
WHERE new_method_group=1;

Pertanyaan ini mula-mula memberikan nilai new_method_group pada setiap baris, yang menunjukkan permulaan kumpulan kaedah baharu. Ia kemudian menapis keputusan untuk memasukkan hanya baris dengan nilai new_method_group 1, memastikan bahawa hanya baris terbaharu untuk setiap kaedah disertakan dalam hasil akhir.

Penyelesaian Alternatif untuk PostgreSQL:

PostgreSQL menyediakan ciri terbina dalam untuk tugasan ini:

SELECT DISTINCT ON (method) timestamp, method, id, response
FROM rpc_responses
WHERE 1 # some where clause here
ORDER BY method, timestamp DESC

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod Terkini dengan Cekap untuk Setiap Kaedah dan ID dalam MySQL dan PostgreSQL?. 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