通过PartnerID,Max(ChangeDate)获取ID的地方 - 快速

时间:2013-07-04 08:49:34

标签: sql sql-server-2012

我得到了下表:

Sampletable
{
 ID int, 
 PartnerID int, 
 ChangeDate datetime
}

我希望所有IDsPartnerID分组,Changedate最高。

是否有高效的方式,或者您是否会建议其他方法来获得类似的结构?

PS:即时通讯使用microsoft sql server 2012

编辑: 我已经有了一种有效的方法,但我认为可能有一个更高效的解决方案:

Select pas.Id, pas1.ChangeDate
from Sampletable pas
inner join (SELECT PartnerID, Max(ChangeDate) as ChangeDate FRom Sampletable Group by PartnerID) pas1 on pas1.PartnerID = pas.PartnerId AND pas1.ChangeDate = pas.ChangeDate

2 个答案:

答案 0 :(得分:1)

你可以尝试这样......

Select ID , 
PartnerID , 
ChangeDate 
from 
( Select  Row_Number() Over (Partition by PartnerID  order by ChangeDate  Desc) as Row, Id
  PartnerID , 
  ChangeDate 
  from SampleTable
) t where row=1

答案 1 :(得分:0)

您可以这样做:

SELECT pas.Id,
       pas.ChangeDate
FROM Sampletable pas
WHERE pas.ChangeDate = (SELECT Max(pas1.ChangeDate) 
                        FROM Sampletable pas1 
                        WHERE pas1.PartnerID = pas.PartnerId)