Di tabel saya, saya memiliki entri yang dipesan oleh timestamp. Saya ingin mengembalikan satu entri yang memiliki timestamp tertinggi.

Ini bekerja:

SELECT max(`timestamp`) FROM `messages`

Namun, ini hanya mengembalikan nilai timestamp. Jadi saya mencoba memilih nilai message juga:

SELECT max(`timestamp`), `message` FROM `messages`

Saya mendapatkan kesalahan ini:

In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'database.messages.message'; this is incompatible with sql_mode=only_full_group_by

Jadi saya menambahkan GROUP BY:

SELECT max(`timestamp`), `message` FROM `messages`
GROUP BY `message`

Namun ini hanya mengembalikan setiap nilai dalam tabel.

Saya mengerti GROUP BY seharusnya menyatukan entri yang identik, saya sama sekali tidak tahu mengapa saya terpaksa menggunakannya dalam situasi ini dan bagaimana cara mendapatkan entri terbaru daripada semuanya.

2
Eight 10 Januari 2020, 14:45

2 jawaban

Jawaban Terbaik

Saya ingin mengembalikan satu entri yang memiliki stempel waktu tertinggi.

Jangan agregat. Anda dapat mengurutkan dan membatasi sebagai gantinya:

select * from messages order by timestamp desc limit 1
5
GMB 10 Januari 2020, 11:46

Silakan coba dengan kueri mysql di bawah ini. kueri dalam pertama mendapatkan angka tertinggi. setelah itu outer query hapus data repetisi.

SELECT 
 * 
FROM
  (SELECT 
    `timestamp` 
  FROM
    `messages` 
  ORDER BY `timestamp`) 
GROUP BY `timestamp` 
0
Harendra Singh 10 Januari 2020, 12:07