Se você quiser o último
id
para cada asker
, então você deve usar uma função agregada:SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
A razão pela qual você estava obtendo o resultado incomum é porque o MySQL usa uma extensão para
GROUP BY
que permite que os itens em uma lista de seleção não sejam agregados e não incluídos na cláusula GROUP BY. No entanto, isso pode levar a resultados inesperados porque o MySQL pode escolher os valores que são retornados. (Consulte Extensões MySQL para GROUP BY
) Dos documentos do MySQL:
Agora, se você tiver outras colunas que precisa retornar da tabela, mas não deseja adicioná-las ao
GROUP BY
devido aos resultados inconsistentes que você pode obter, então você pode usar uma subconsulta para fazer isso. (Demonstração
) 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