Si quieres el último id
para cada asker
, entonces debería usar una función agregada:
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
La razón por la que obtuvo el resultado inusual es porque MySQL usa una extensión para GROUP BY
que permite que los elementos de una lista de selección no se agreguen ni se incluyan en la cláusula GROUP BY. Sin embargo, esto puede generar resultados inesperados porque MySQL puede elegir los valores que se devuelven. (Ver Extensiones MySQL para GROUP BY
)
De los documentos de MySQL:
Ahora, si tiene otras columnas que necesita devolver de la tabla, pero no desea agregarlas a GROUP BY
debido a los resultados inconsistentes que podría obtener, entonces podría usar una subconsulta para hacerlo. (Demostración
)
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