Ако искате последния id
за всеки asker
, тогава трябва да използвате агрегатна функция:
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
Причината, поради която получавате необичайния резултат е, защото MySQL използва разширение за GROUP BY
което позволява елементите в избран списък да бъдат неагрегирани и да не бъдат включени в клаузата GROUP BY. Това обаче може да доведе до неочаквани резултати, тъй като MySQL може да избере стойностите, които се връщат. (Вижте Разширения на MySQL към GROUP BY
)
От MySQL Docs:
Сега, ако сте имали други колони, които трябва да върнете от таблицата, но не искате да ги добавяте към GROUP BY
поради непоследователните резултати, които бихте могли да получите, тогава можете да използвате подзаявка, за да направите това. (Демо
)
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