繁体   English   中英

sql最小值来自一列,另一列唯一的第三列

[英]sql minimum from one column, unique for another column group by a third

我有这个查询,我从三个表中选择

select 
    min(t.ReminderDt) as 'rem dt',  
    m.Group_Id, m.AccountNumber 
from 
    ACE_AccsLevelTran t, ACE_AccsLevelMaster m 
where 
    t.MasterAccNumber = m.AccountNumber 
group by  
    m.Group_Id, m.AccountNumber;

这导致:

rem dt | Group_Id| AccountNumber
--------------------------------    
2/8/2013 | 3 | 4216985
2/22/2013 | 4 | 4274863
2/7/2013 | 3 | 4366383
2/28/2013 | 4 | 7151712

我如何获得3和4的最小日期行,如结果 -

2/7/2013 | 3 | 4366383
2/22/2013 | 4 | 4274863

只需从组中删除account_number,并在select行上使用min()max()将其包围:

select min(t.ReminderDt) as 'rem dt',  m.Group_Id, min(m.AccountNumber)
from ACE_AccsLevelTran t,     ACE_AccsLevelMaster m 
where t.MasterAccNumber=m.AccountNumber
group by  m.Group_Id

返回任意帐号。 要获得具有最小值的 ,最好的方法是使用row_number()

select *
from (select t.ReminderDt) as 'rem dt',  m.Group_Id, m.AccountNumber,
            row_number() over (partition by group_id order by reminderdt desc) as seqnum
      from ACE_AccsLevelTran t join ACE_AccsLevelMaster m 
           on t.MasterAccNumber=m.AccountNumber
     ) t
where seqnum = 1

此外,您应该学习此标准中使用的ANSI标准JOIN语法。

如果您的accountNumber也是唯一的,您可以这样做:

Select m.Group_Id ,X.MinReminderDT,m.AccountNumber 
from ACE_AccsLevelMaster m join(
select min(t.ReminderDt) as MinReminderDT,t.MasterAccNumber
from ACE_AccsLevelTran t
Group By t.MasterAccNumber) X on X.MasterAccNumber=m.AccountNumber

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM