Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So gruppieren Sie nach DESC-Reihenfolge

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