0

3つのテーブルから選択しているこのクエリがあります

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
4

2 に答える 2

3

account_numberをgroupbyで削除し、次の行で囲むmin()max()、次のselect行で囲みます。

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構文を学習する必要があります。

于 2013-02-26T16:59:19.287 に答える
-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
于 2013-02-26T17:05:35.160 に答える