【问题标题】:Select the minimum value for each row join by another table选择由另一个表连接的每个行的最小值
【发布时间】:2013-10-25 10:12:07
【问题描述】:

我有下表:

           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。

【问题讨论】:

  • select min(record) from table where date ='waterverdate' group by name?
  • 您能否再次检查您的示例?和/或解释为什么结果表中的最后一行是 18.00 而不是 12.00?如果您要过滤 2013 年 12 月 7 日,您会期望值 1.00、0.00、NULL、3.00 吗?

标签: sql join group-by multiple-tables minimum


【解决方案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

【讨论】:

  • OP 要求的是 MIN,而不是 SUM。
  • @Doug_Ivison 是的!对不起。谢谢
  • Kirill,您能否在后面添加更多语法以仅选择我想要的“日期”?示例:其中日期 = '11/7/2013'
【解决方案2】:

用途:

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

【讨论】:

    【解决方案3】:
    select 
            b.Name,
            b.Dept,
            min(a.Record)
    from Table1 a,Table2 b 
    where
            a.ID=b.ID 
    group by 
            a.Record
    

    【讨论】:

    • group by 包含聚合函数中 NOT 的列,因此:group by b.Name, b.Dept
    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    相关资源
    最近更新 更多