在某些字段上选择具有条件的另一个表的每个行连接的最小值

时间:2018-01-10 08:44:05

标签: sql greatest-n-per-group

我有两张表:

chkeq:function(a,b){
    if(a==b){
      return true;}
else return false;
}

希望结果如下:

       UserTelTable                        (userTable)        
CardNo  ID   tel     telorder            ID    Name     .....(other columns )
1      101   7777       4                101   Danny     
2      101   6666       1                102   Tanya     
3      101   5555       2                103   Susan     
4      102   4444       6                104   Gordon    
5      103   1234       1                  
6      104   4567       2                  
7      104   5678       3                 
8      101   4141       6                
9      101   5151       3                  
10     102   0000       3                 
11     102   1111       5                
12     104    7890      4                
13     104    1212      1  

其中结果显示每个“userid”,用户名,userfamily,...的“telorder”的最小值,并按所选日期过滤。

2 个答案:

答案 0 :(得分:1)

我假设你在预期结果的第一行有错误。使用group by子查询查找telorder中的最低UserTelTable,然后适当地加入表格。

select ut.*, utt.*
from userTable ut
join UserTelTable utt on ut.id = utt.id
join 
(
  select id, min(telorder) min_telorder
  from UserTelTable
  group by id
) t on utt.id = t.id and
       utt.telorder = t.min_telorder

答案 1 :(得分:1)

您可以使用最小值

上的子查询加入链接表
  select a.name, b.tel
  from userTable a
  inner join UserTelTable b on a.id =b.id 
  inner join (

  select ID, min(telorder) telord
  from UserTelTable
  group by ID
  ) t on t.id =a.id and t.telord = b.telorder