Ricevi l’ultima data dai dati MySQL raggruppati

Ho i seguenti dati nel mio database:

|NO | model | date | +---+-------+----------+ |1 | bee |2011-12-01| |2 | bee |2011-12-05| |3 | bee |2011-12-12| |4 | tar |2011-12-13| 

Voglio ottenere l’ultima data di ogni gruppo di modelli:

 | model | date | +-------+----------+ | bee |2011-12-12| | tar |2011-12-13| 

Provai:

 SELECT model, date FROM doc WHERE date ........????? //what is the next? GROUP BY model 

Stai cercando la data massima per ogni modello?

 SELECT model, max(date) FROM doc GROUP BY model 

Se stai cercando tutti i modelli che corrispondono alla data massima dell’intera tabella …

 SELECT model, date FROM doc WHERE date IN (SELECT max(date) FROM doc) 

Puoi provare a usare max () in sottoquery, qualcosa di simile a questo:

 SELECT model, date FROM doc WHERE date in (SELECT MAX(date) from doc GROUP BY model); 

Subquery dando date. Non stiamo collegando con il modello. Quindi sotto query risolve il problema.

Se ci sono date / modelli duplicati possono essere evitati dalla seguente query.

 select t.model, t.date from doc t inner join (select model, max(date) as MaxDate from doc group by model) tm on t.model = tm.model and t.date = tm.MaxDate 

prova questo:

 SELECT model, date FROM doc WHERE date = (SELECT MAX(date) FROM doc GROUP BY model LIMIT 0, 1) GROUP BY model 

L’utilizzo di max (data) non ha risolto il mio problema in quanto non vi è alcuna garanzia che altre colonne saranno dalla stessa riga del massimo (data). Invece di questo questo ha risolto il mio problema e ordinato il gruppo in un ordine corretto ei valori di altre colonne sono dalla stessa riga della data massima è:

 SELECT model, date FROM (SELECT * FROM doc ORDER BY date DESC) as sortedTable GROUP BY model 

Questo dovrebbe funzionare:

 SELECT model, date FROM doc GROUP BY model ORDER BY date DESC 

Semplicemente ordina le date dall’ultimo al primo e raggruppando si prende solo il primo.

E perché non usare questo?

 SELECT model, date FROM doc ORDER BY date DESC LIMIT 1 
 SELECT model, date FROM doc WHERE date = '2011-12-12' 

non hai nemmeno bisogno di raggruppare per

Se stai cercando la data massima, (il tuo esempio non lo suggerisce a proposito)

 SELECT model, MAX(date) FROM doc WHERE date = '2011-12-12' group by model