2013-10-17 15 views
11

Ho la seguente tabella:Selezionare il valore minimo per ogni riga si uniscono da un altro tavolo

  Table1       Table2   
CardNo ID Record Date   ID Name  Dept  
1  101 8.00 11/7/2013  101 Danny  Green 
2  101 13.00 11/7/2013  102 Tanya  Red 
3  101 15.00 11/7/2013  103 Susan  Blue  
4  102 11.00 11/7/2013  104 Gordon Blue  
5  103 12.00 11/7/2013     
6  104 12.00 11/7/2013     
7  104 18.00 11/7/2013     
8  101 1.00 12/7/2013     
9  101 10.00 12/7/2013     
10  102 0.00 12/7/2013     
11  102 1.00 12/7/2013     
12  104 3.00 12/7/2013     
13  104 4.00 12/7/2013 

Voglio che il risultato sia simile a questo:

Name Dept Record 
Danny Green 8.00 
Tanya Red  11.00 
Susan Blue 12.00 
Gordon Blue 18.00 

in cui il risultato è solo mostrando la valore minimo di "Record" per ogni "Nome" e filtrato dalla data selezionata. Sto usando SQL.

+0

selezionare min (record) dalla tabella dove data = 'wateverdate' raggruppa per nome? – zxc

risposta

17

Usa:

select t2.Name, t2.Dept, min(t1.Record) 
from table1 t1 
join table2 t2 on t2.ID = t1.ID 
group by t2.ID, t2.Name, t2.Dept 

o

select t2.Name, t2.Dept, a.record 
from table2 t2 
join 
(
    select t1.ID, min(t1.Record) [record] 
    from table1 t1 
    group by t1.ID 
)a 
on a.ID = t2.ID 

Per filtrare query, aggiungere where clausola, per es .:

select t2.Name, t2.Dept, min(t1.Record) 
from table1 t1 
join table2 t2 on t2.ID = t1.ID 
where t1.Date = '11/7/2013' 
group by t2.ID, t2.Name, t2.Dept 
+2

Primo di pubblicare correttamente. –

1

Prova:

Select 
    b.Name, 
    b.Dept, 
    MIN(Record) Record 
from 
    Table1 a join Table2 b on a.ID=b.ID 
GROUP BY b.Name, 
    b.Dept 
+0

OP chiesto MIN, non SOMMA. –

+1

@Doug_Ivison Sì! scusa. Grazie – TechDo

+0

Kirill, potresti aggiungere qualche altra sintassi dietro per selezionare solo la 'data' che voglio? esempio: dove date = '11/7/2013 ' – wood

0
select 
     b.Name, 
     b.Dept, 
     min(a.Record) 
from Table1 a,Table2 b 
where 
     a.ID=b.ID 
group by 
     a.Record 
+1

Il gruppo contiene le colonne * NOT * in funzioni aggregate, quindi: 'group by b.Name, b.Dept' –