2013-02-26 58 views
0

我有這個疑問在那裏我從三個表SQL最小的第三

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 
+0

[不良習慣踢:使用舊樣式的JOIN(http://sqlblog.com/blogs/aaron_bertrand/archive /2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - 舊式*逗號分隔的表格樣式列表已停用ANSI - ** 92 ** SQL標準(** 20年前**!)。 ***請***停止使用它 – 2013-02-26 16:59:21

回答

3

只需從組中刪除account_number由p和環繞它與上線路selectmin()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語法,在此查詢使用。

-1

如果您使用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 
+0

這不會工作,因爲有一個組ID的多個帳號。 – 2013-02-26 17:21:36