Kami tidak dapat mereferensikan hasil fungsi agregat (misalnya MAX()
) dalam WHERE
klausa dari SELECT
. yang sama .
Pola normatif untuk memecahkan masalah jenis ini adalah dengan menggunakan tampilan sebaris, kira-kira seperti ini:
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
JOIN ( SELECT MAX(mx.id) AS max_id
FROM mytable mx
) m
ON m.max_id = t.id
Ini hanyalah salah satu cara untuk mendapatkan hasil yang ditentukan. Ada beberapa pendekatan lain untuk mendapatkan hasil yang sama, dan beberapa di antaranya bisa jadi kurang efisien daripada yang lain. Jawaban lain menunjukkan pendekatan ini:
WHERE t.id = (SELECT MAX(id) FROM ... )
Terkadang, pendekatan paling sederhana adalah menggunakan ORDER BY dengan LIMIT. (Perhatikan bahwa sintaks ini khusus untuk MySQL)
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
ORDER BY t.id DESC
LIMIT 1
Perhatikan bahwa ini hanya akan mengembalikan satu baris; jadi jika ada lebih dari satu baris dengan nilai id yang sama, maka ini tidak akan mengembalikan semuanya. (Kueri pertama akan mengembalikan SEMUA baris yang memiliki nilai id yang sama.)
Pendekatan ini dapat diperluas untuk mendapatkan lebih dari satu baris, Anda bisa mendapatkan lima baris yang memiliki nilai id tertinggi dengan mengubahnya menjadi LIMIT 5
.
Perhatikan bahwa kinerja pendekatan ini sangat bergantung pada indeks yang sesuai yang tersedia (yaitu dengan id
sebagai KUNCI UTAMA atau sebagai kolom terdepan dalam indeks lain.) Indeks yang sesuai akan meningkatkan kinerja kueri menggunakan semua pendekatan ini.