一个列的sql最小值,另一个列组的sql最小值为三分之一
我从三个表中选择了这个查询一个列的sql最小值,另一个列组的sql最小值为三分之一,sql,sql-server-2008,Sql,Sql Server 2008,我从三个表中选择了这个查询 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
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
只需将帐号从组中删除,并在
选择行上用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\u number()
:
此外,您还应该学习本查询中使用的ANSI标准联接语法。如果您的帐号也是唯一的,您可以通过以下方式进行:
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
-这种旧式的逗号分隔表列表样式在ANSI-92 SQL标准(20年前!)。请停止使用它这将不起作用,因为一个组id有多个帐号。
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