Als je de laatste id
. wilt voor elke asker
, dan moet u een aggregatiefunctie gebruiken:
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
De reden waarom u het ongebruikelijke resultaat kreeg, is omdat MySQL een extensie gebruikt voor GROUP BY
waarmee items in een selecte lijst niet-geaggregeerd kunnen worden en niet kunnen worden opgenomen in de GROUP BY-clausule. Dit kan echter tot onverwachte resultaten leiden omdat MySQL de waarden kan kiezen die worden geretourneerd. (Zie MySQL-extensies voor GROUP BY
)
Uit de MySQL-documenten:
Als u nu andere kolommen had die u uit de tabel moet halen, maar deze niet wilt toevoegen aan de GROUP BY
vanwege de inconsistente resultaten die u zou kunnen krijgen, kunt u hiervoor een subquery gebruiken. (Demo
)
select
q.Id,
q.asker,
q.other -- add other columns here
from questions q
inner join
(
-- get your values from the group by
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
) m
on q.id = m.id
order by q.id desc