Om du vill ha det sista id
för varje asker
, då bör du använda en aggregatfunktion:
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
Anledningen till att du fick det ovanliga resultatet är att MySQL använder ett tillägg till GROUP BY
som tillåter att objekt i en urvalslista inte är aggregerade och inte inkluderas i GROUP BY-satsen. Detta kan dock leda till oväntade resultat eftersom MySQL kan välja de värden som returneras. (Se MySQL-tillägg till GROUP BY
)
Från MySQL Docs:
Om du nu hade andra kolumner som du behöver returnera från tabellen, men inte vill lägga till dem i GROUP BY
på grund av de inkonsekventa resultaten som du kan få, kan du använda en underfråga för att göra det. (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