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