Wenn Sie die letzte id
wollen für jeden asker
, dann sollten Sie eine Aggregatfunktion verwenden:
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
Der Grund für das ungewöhnliche Ergebnis liegt darin, dass MySQL eine Erweiterung für GROUP BY
verwendet Dadurch können Elemente in einer Auswahlliste nicht aggregiert und nicht in die GROUP BY-Klausel aufgenommen werden. Dies kann jedoch zu unerwarteten Ergebnissen führen, da MySQL die zurückgegebenen Werte auswählen kann. (Siehe MySQL-Erweiterungen für GROUP BY
)
Aus den MySQL-Dokumenten:
Wenn Sie nun andere Spalten hatten, die Sie aus der Tabelle zurückgeben müssen, diese aber nicht zu GROUP BY
hinzufügen möchten Aufgrund der inkonsistenten Ergebnisse, die Sie erhalten könnten, könnten Sie dazu eine Unterabfrage verwenden. (Demo
)
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