2014-07-11 15 views
5

Questa è la mia struttura della tabella:SQL: Filtra righe con valore massimo

File | Version  | Function 
1  | 1   | 1 
1  | 2   | 1 
1  | 3   | 1 
1  | 2   | 2 

2  | 1   | 4 
3  | 2   | 5 

ho bisogno di tornare queste righe solo

1  | 3   | 1 
2  | 1   | 4 
3  | 2   | 5 

Significato voglio solo le funzioni che hanno la versione più recente per ogni file.

Non voglio il risultato qui sotto, cioè id funzione unica che non sono la versione più recente

1  | 3   | 1 
1  | 2   | 2 
... 

Ho guardato How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?, ma che restituisce il più recenti ids funzione unica.

La query deve essere compatibile con sqlite3.

risposta

3

Un modo efficace per fare questo è spesso da usare not exists:

select t.* 
from table t 
where not exists (select 1 
        from table t2 
        where t2.file = t.file and t2.Version > t.version 
       ); 

Questa query possono usufruire di un indice table(file, version).

Questo riformula la query in modo che sia: "Ottieni tutte le righe dalla tabella in cui il file corrispondente non ha una versione più grande."

+0

Ha lavorato prefectly, grazie. Potresti esaminare la mia prossima domanda da quando hai risolto 1/4 di quello? http://stackoverflow.com/questions/24719716/sql-complex-sum-from-multiple-tables –

1

Si noti che questo restituirà più righe per file se esiste la versione più recente per un file per diverse funzioni. Ad esempio, se il tuo esempio precedente aveva una riga aggiuntiva (1,3,2), questo restituirebbe 2 righe per il file 1.

select 
    t1.file, 
    t1.version, 
    t1.function 
from 
    mytable t1 
join (
    select 
     t2.file, 
     max(t2.version) max_version   
    from mytable t2 
    group by t2.file 
) t3 join t1.file = t3.file and t1.version = t3.max_version 
2

In SQLite 3.7.11 o successivo, quando si utilizzano MAX, gli altri valori sono garantiti per venire dalla riga con il valore più grande:

SELECT File, 
     MAX(Version) AS Version, 
     Function 
FROM MyTable 
GROUP BY File 
Problemi correlati