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

MySQL ottiene i record delle ultime date da più

puoi usa GROUP BY , ma è importante capire come funziona.

Quando usi GROUP BY un gruppo di righe viene compresso in una e ciò che viene visualizzato nelle altre colonne non utilizzate nel tuo GROUP BY clausola, è determinata utilizzando funzioni aggregate o è una riga casuale di quel gruppo. Non puoi essere sicuro di ottenere la riga corrispondente alla riga visualizzata con MAX() valore o qualsiasi funzione di aggregazione utilizzata. Questo diventa particolarmente ovvio, quando esegui una query come:

SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id

"Another_column" può appartenere alla riga che contiene il valore MIN() o MAX() o anche a un'altra riga non visualizzata affatto. In altri RDBMS diversi da MySQL è effettivamente vietato selezionare colonne che non utilizzano una funzione di aggregazione o che non sono elencate nel GROUP BY clausola, proprio per evitare che gli utenti commettano errori o pensino di aver ottenuto il risultato giusto.

Quindi, nel tuo caso sembra che tu voglia visualizzare anche la colonna "valore". Per i motivi di cui sopra, la risposta di juergen_d è sbagliata, perché non seleziona "valore" e, in tal caso, non puoi essere sicuro che sia il "valore" giusto. La risposta di Filipe Silva è sbagliata, perché raggruppa per "valore". In questo modo, nel tuo caso, verrà effettivamente restituita l'intera tabella. La risposta di Romesh è sbagliata, perché usa due volte il MAX() la funzione ti darà i valori massimi, ovviamente ma non il valore corrispondente al valore datetime.

Allora, come devi farlo? Qui sono descritti 3 modi . Imparali applicandoli tu stesso. Non è così difficile :)