2013-04-30 56 views
0

我有如下表ContactDetails。此表包含手机以及电子邮件。这些行可以根据用户最新的联系信息进行更新。所以userid(这里是1)可以有多个按照下面的电子邮件和单元格分组的行。可以有多个用户2.3.4 ...等等在T-SQL中按分组选择不同的列

行情况如下

SrNo Userid ContactType ContactDetail  LoadDate 
    1 1  Email   [email protected] 2013-01-01 
    2 1  Cell   12345678   2013-01-01 

    3 1  Email   [email protected] 2012-01-01 
    4 1  Cell   98765432   2012-01-01 

    5 1  Email   [email protected] 2011-01-01 
    6 1  Cell   987654321  2011-01-01 

我找了用户的最近EmailCell细节。我试着运行查询如下

Select 
    Userid, 
    Max(ContactDetail), 
    MAX(LoadDate) 
from 
    ContactDetails 
group by 
    Userid, ContactType; 

但我明白这是行不通的。

任何人都可以提出一些建议,以拉最新的电子邮件和细胞在单个或子查询?

干杯! Junni

回答

1

您可以使用ROW_NUMBER()选择最近的利益排:

;With Ordered as (
    select UserId,ContactType,ContactDetail,LoadDate, 
      ROW_NUMBER() OVER (
       PARTITION BY UserID,ContactType 
       ORDER BY LoadDate DESC) as rn 
    from ContactDetails 
) 
select * from Ordered where rn = 1 
+0

哇感谢这样一个精彩的回答!它节省了我的时间! – 2013-04-30 08:36:54