2011-09-05 18 views
9

Nella mia query SQL sto selezionando i dati con GROUP BY e clausole ORDINE BY. La tabella ha lo stesso numbers su più righe con tempi diversi in ogni riga. Quindi penso di voler applicare una clausola GROUP BY.MySQL - utilizzando GROUP BY e DESC

Tuttavia nei risultati restituisce il tempo più vecchio con il numero, ma ho bisogno del tempo più recente.

SELECT * FROM TABLE GROUP BY (numbers) ORDER BY time DESC 

La query viene visualizzato come se dovesse applicare prima GROUP BY e poi ORDER BY ... ma i risultati non sembrano lavorare in questo modo.

C'è un modo per risolvere questo problema?

+3

[Nei documenti] (http://dev.mysql.com/doc/refman/5.6/en/group-by-hidden-columns.html) il comportamento che si ottiene se si selezionare le colonne che non sono raggruppate viene esplicitamente chiamato "indeterminato" nel caso in cui abbiano più valori per gruppo. Non puoi fare affidamento su alcun comportamento particolare. Ti serve l'intera riga o solo "numeri, max (tempo)" –

+0

Puoi fornire alcune righe di dati con il risultato che ti aspetti? –

+0

Grazie ragazzi, mi avete spostato nella giusta direzione. – user1946705

risposta

14

work-around è quello di riscrivere la query come:

SELECT * FROM (SELECT * FROM table ORDER BY time DESC) AS t GROUP BY numbers; 
+3

P.S. questo potrebbe causare un colpo di prestazioni – jbrond

+4

In teoria non si può garantire che si otterrà sempre lo stesso risultato. – Karolis

+1

@Karolis concordato, la tua risposta sembra essere quella più corretta – feeela

13
SELECT * 
FROM table t 
WHERE time = (
    SELECT max(time) 
    FROM table 
    WHERE t.numbers = numbers 
) 
-4
SELECT * FROM TABLE GROUP BY numbers DESC; 

Questo vi darà ultimo record del gruppo.

Grazie

+0

Questo non risponde alla domanda. Vogliono ordinare prima del raggruppamento. –