Jeśli chcesz ostatni id
dla każdego asker
, powinieneś użyć funkcji agregującej:
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
Powodem, dla którego otrzymujesz nietypowy wynik, jest to, że MySQL używa rozszerzenia GROUP BY
co pozwala na niezagregowanie pozycji na liście wyboru i nieuwzględnienie ich w klauzuli GROUP BY. Może to jednak prowadzić do nieoczekiwanych wyników, ponieważ MySQL może wybrać zwracane wartości. (Zobacz Rozszerzenia MySQL do GROUP BY
)
Z dokumentacji MySQL:
Teraz, jeśli masz inne kolumny, które musisz zwrócić z tabeli, ale nie chcesz ich dodawać do GROUP BY
ze względu na niespójne wyniki, które możesz uzyskać, możesz użyć do tego podzapytania. (Demonstracja
)
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