Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memilih Nilai Terkini dengan Cekap untuk Setiap Kunci dalam Jadual Pangkalan Data?

Bagaimana untuk Memilih Nilai Terkini dengan Cekap untuk Setiap Kunci dalam Jadual Pangkalan Data?

DDD
Lepaskan: 2024-12-31 20:25:19
asal
1014 orang telah melayarinya

How to Efficiently Select the Most Recent Values for Each Key in a Database Table?

Memilih Nilai Terkini untuk Setiap Kunci dalam Jadual Pangkalan Data

Apabila bekerja dengan jadual yang mengandungi data penderia atau maklumat lain yang dicap masa, ia selalunya diperlukan untuk mendapatkan semula entri terbaharu bagi setiap nilai kunci individu. Walaupun pendekatan mudah yang melibatkan pengumpulan mengikut kekunci dan susunan mengikut cap masa maksimum mungkin kelihatan intuitif, ia boleh menyebabkan ralat disebabkan oleh kemasukan medan bukan kunci dalam pengagregatan.

Penyelesaian Ganti Menggunakan Subquery :

Satu kaedah yang boleh dipercayai menangani isu ini dengan menggunakan subkueri untuk mengenal pasti cap masa maksimum untuk setiap nilai kunci:

SELECT sensorID,
       timestamp,
       sensorField1,
       sensorField2
FROM sensorTable
WHERE timestamp = (SELECT MAX(timestamp) FROM sensorTable WHERE sensorID = sensorTable.sensorID)
ORDER BY sensorID, timestamp;
Salin selepas log masuk

Dalam pertanyaan ini:

  • Jadual penderia jadual utama diakses dua kali.
  • Subquery dalam mendapatkan cap masa maksimum (MAX (cap masa)) untuk setiap sensorID dan membandingkannya dengan cap masa yang sepadan dari yang utama jadual.
  • Baris dengan cap masa terbaharu dipilih untuk setiap nilai kunci.
  • Lajur yang diambil termasuk sensorID, cap masa, sensorField1 dan sensorField2.

Penyelesaian Tambahan Menggunakan JOIN:

Penyelesaian alternatif menggunakan operasi JOIN:

SELECT
    s1.sensorID,
    s1.timestamp,
    s1.sensorField1,
    s1.sensorField2
FROM sensorTable AS s1
JOIN (
    SELECT sensorID, MAX(timestamp) AS max_timestamp
    FROM sensorTable
    GROUP BY sensorID
) AS s2
    ON s1.sensorID = s2.sensorID AND s1.timestamp = s2.max_timestamp;
Salin selepas log masuk
  • Pertanyaan ini mencipta jadual sementara (s2) yang mengandungi cap masa maksimum untuk setiap sensorID.
  • s1 (jadual utama) dicantumkan dengan s2 dihidupkan lajur sensorID dan cap masa untuk memilih baris terbaharu bagi setiap nilai kunci.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Nilai Terkini dengan Cekap untuk Setiap Kunci dalam Jadual Pangkalan Data?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan