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

SQL:come mantenere l'ordine delle righe con DISTINCT?

il distinct la parola chiave sta facendo quello che dovrebbe fare, restituire una riga ciascuna con un determinato valore di colonna. Distinct non ti consente di specificare quale tale riga verrà restituita ed è chiaro dalla query originale che tale ordinamento è consentito (c'è una riga con id 443 che segue una riga con id 429).

Per assumere il controllo di quali righe verranno restituite, è necessario riformulare la query. Una soluzione tipica che adotterò è usare un group by , selezionando la colonna del gruppo e la riga desiderata da ciascun gruppo, qualcosa dell'effetto di

SELECT message.id, MAX(message.created_at) FROM message GROUP BY message.id;

Se devo fare di più, userò questo tipo di query come sottoselezione in una query più ampia, eventualmente unendomi al campo id per ottenere più campi dalla riga preferita, oppure ordinando la query in un modo particolare.