Rumah >pangkalan data >tutorial mysql >Bagaimana untuk MEMILIH Baris dengan Masa Tarikh MAX untuk Setiap Rumah dalam MySQL?

Bagaimana untuk MEMILIH Baris dengan Masa Tarikh MAX untuk Setiap Rumah dalam MySQL?

Linda Hamilton
Linda Hamiltonasal
2025-01-25 06:38:09294semak imbas

How to SELECT Rows with the MAX Datetime for Each Home in MySQL?

mysql: Memilih baris dengan datetime maksimum untuk setiap kumpulan

Panduan ini menunjukkan bagaimana untuk mendapatkan baris dengan cekap yang mengandungi nilai datetime maksimum untuk setiap kumpulan yang berbeza dalam jadual MySQL. Ini adalah cabaran SQL biasa, sering melibatkan subqueries atau fungsi tingkap.

senario:

Bayangkan Jadual () Penggunaan Sumber Pemain Penjejakan di Rumah Berbeza:

TopTen

Matlamatnya adalah untuk mencari, untuk setiap
<code class="language-sql">CREATE TABLE TopTen (
  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  home INT UNSIGNED NOT NULL,
  datetime DATETIME NOT NULL,
  player VARCHAR(6) NOT NULL,
  resource INT NOT NULL
);</code>
, rekod dengan entri paling terkini (

), termasuk maklumat home dan datetime dari rekod terbaru itu. player resource

Pendekatan yang tidak cekap (dan mengapa mereka gagal):

mudah

dan

tidak akan berfungsi secara langsung, sebagai GROUP BY agregat data, kehilangan lajur yang tidak diagihkan seperti MAX(). Percubaan menggunakan subqueries untuk mencari datetime maksimum untuk setiap rumah dan kemudian bergabung kembali ke meja asal sering membawa kepada hasil yang salah atau tidak lengkap. GROUP BY player

Penyelesaian yang berkesan:

Penyelesaian yang paling berkesan memanfaatkan diri dengan subquery:

pertanyaan ini berfungsi dengan:
<code class="language-sql">SELECT tt.*
FROM TopTen tt
INNER JOIN (
    SELECT home, MAX(datetime) AS MaxDateTime
    FROM TopTen
    GROUP BY home
) groupedtt ON tt.home = groupedtt.home AND tt.datetime = groupedtt.MaxDateTime;</code>

    subquery ():
  1. pertanyaan dalaman ini mencari maksimum untuk setiap groupedtt, mengumpulkan hasilnya dengan . datetime home home Sertai:
  2. Pertanyaan luar menyertai jadual asal (
  3. alias sebagai ) dengan hasil subquery. Keadaan memastikan bahawa hanya baris yang sepadan dengan kedua -dua TopTen dan maksimum tt dimasukkan ke dalam hasil akhir. JOIN home datetime Kaedah ini memastikan bahawa semua lajur dari jadual asal (termasuk
  4. dan
) dikembalikan untuk baris yang mewakili maksimum

untuk setiap player. Ini mengelakkan kehilangan data dan memberikan maklumat lengkap yang diperlukan. resource

Atas ialah kandungan terperinci Bagaimana untuk MEMILIH Baris dengan Masa Tarikh MAX untuk Setiap Rumah dalam MySQL?. 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