Pokud chcete poslední id
pro každého asker
, pak byste měli použít agregační funkci:
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
Důvodem, proč jste získali neobvyklý výsledek, je to, že MySQL používá rozšíření GROUP BY
což umožňuje, aby položky ve výběrovém seznamu nebyly agregované a nebyly zahrnuty do klauzule GROUP BY. To však může vést k neočekávaným výsledkům, protože MySQL si může vybrat hodnoty, které se vrátí. (Viz Rozšíření MySQL pro GROUP BY
)
Z dokumentů MySQL:
Nyní, pokud máte další sloupce, které potřebujete vrátit z tabulky, ale nechcete je přidávat do GROUP BY
kvůli nekonzistentním výsledkům, které byste mohli získat, byste k tomu mohli použít poddotaz. (Ukázka
)
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