Kumpulkan menggunakan GROUP BY dan MAX(DATE) [pendua]
Dalam SQL, anda mungkin menghadapi situasi di mana anda perlu mengekstrak rekod terkini berdasarkan lajur dan kumpulan tertentu mengikut lajur lain. Sebagai contoh, anda mungkin perlu menentukan destinasi terkini setiap kereta api dalam jadual.
Kumpulkan mengikut MAX(Masa)
Pada mulanya, anda cuba mencapai ini menggunakan pernyataan GROUP BY dan MAX(Time) yang mudah, tetapi ini mengakibatkan ralat. Ini kerana anda tidak boleh mengagregatkan lajur bukan kumpulan dalam pernyataan GROUP BY. Untuk menyelesaikan masalah ini, anda perlu memasukkan 'Dest' dalam kumpulan mengikut kenyataan. Walau bagaimanapun, ini tidak membuahkan hasil yang diharapkan.
Gunakan subquery dan fungsi RANK
Penyelesaian melibatkan penggunaan subqueries dan fungsi RANK(). Subkueri mencipta jadual perantaraan yang mengira kedudukan setiap destinasi berdasarkan masa berlepas. Fungsi RANK() memberikan kedudukan berdasarkan masa, dan untuk setiap kereta api, nilai maksimum (masa terkini) diberikan pangkat 1.
Pertanyaan akhir memilih kereta api, destinasi dan masa daripada subkueri dengan kedudukan_tujuan ialah 1. Ini memastikan bahawa hanya destinasi terkini setiap kereta api diambil.
Berikut ialah pertanyaan SQL yang dikemas kini:
SELECT train, dest, time FROM ( SELECT train, dest, time, RANK() OVER (PARTITION BY train ORDER BY time DESC) dest_rank FROM traintable ) where dest_rank = 1;
Pertanyaan ini akan menghasilkan hasil yang diingini:
火车 | 目的地 | 时间 |
---|---|---|
1 | SZ | 14:00 |
2 | HK | 13:00 |
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod Terkini untuk Setiap Kumpulan Menggunakan SQL GROUP BY dan MAX(DATE)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!