2013-10-17 120 views
11

我有如下表:選擇最小值的每一行由另一個表連接

  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 

我想要得到的結果是這樣的:

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

其結果爲只顯示每個「名稱」的「記錄」最小值,並按所選日期過濾。我正在使用SQL。

+0

從表中選擇min(record)where where ='wateverdate'group by name? – zxc

回答

17

用途:

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 

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 

要過濾查詢,添加where條款,例如:

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

第一個要正確發佈。 –

1

請嘗試:

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要求MIN,而不是SUM。 –

+1

@Doug_Ivison是的!抱歉。謝謝 – TechDo

+0

基里爾,你能不能添加一些更多的語法來選擇我想要的'日期'?例如:where 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

group by包含* NOT *在聚合函數中的列,所以:'group by b.Name,b.Dept' –

相關問題