在T-SQL中分组以选择不同的列

时间:2013-04-30 08:00:08

标签: sql sql-server tsql

我有以下表格ContactDetails。此表包含手机和电子邮件。可以根据用户的最新联系人详细信息更新这些行。因此userid(此处为1)可以通过电子邮件和单元格分组多行,如下所示。可以有多个用户2.3.4 ...等等

行如下

   SrNo  Userid  ContactType  ContactDetail     LoadDate
    1    1       Email         x1.y@gmail.com   2013-01-01
    2    1       Cell          12345678         2013-01-01

    3    1       Email         x2.y@gmail.com   2012-01-01
    4    1       Cell          98765432         2012-01-01

    5    1       Email         x2.y@gmail.com   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 个答案:

答案 0 :(得分: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