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 :)