Mysql
 sql >> Database >  >> RDS >> Mysql

Come raggruppare per ordine DESC

Se vuoi l'ultimo id per ogni asker , dovresti usare una funzione di aggregazione:

SELECT max(id) as id, 
   asker
FROM questions 
GROUP by asker 
ORDER by id DESC

Il motivo per cui stavi ottenendo il risultato insolito è perché MySQL utilizza un'estensione per GROUP BY che consente agli elementi in un elenco selezionato di non essere aggregati e non inclusi nella clausola GROUP BY. Questo, tuttavia, può portare a risultati imprevisti perché MySQL può scegliere i valori che vengono restituiti. (Vedi Estensioni MySQL per GROUP BY )

Dai documenti MySQL:

Ora, se avevi altre colonne che devi restituire dalla tabella, ma non vuoi aggiungerle al GROUP BY a causa dei risultati incoerenti che potresti ottenere, potresti utilizzare una sottoquery per farlo. (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