获取最近的一组重复行

时间:2013-10-30 11:19:29

标签: sql-server-2008

我有一个表'UserLibrary'

   Name  Library    AccessedTime

    A      ABC       2:00 am
    B      XYZ       4:00 am
    C      PQR       5:00 am 
    C      PQR       12:00 pm 
    C      PQR       2:00 pm
    D      LIT       4:00 pm

我想要一个不同用户列表,图书馆及其上次访问时间。

从UserLibrary中选择*,将为我提供用户'C'和库'PQR'的重复行,但我想只为用户C使用上次访问时间。

基本上我想要,

   Name  Library    AccessedTime

    A      ABC       2:00 am
    B      XYZ       4:00 am 
    C      PQR       2:00 pm
    D      LIT       4:00 pm

我如何在Sql server中执行此操作

2 个答案:

答案 0 :(得分:1)

您可以使用ROW_NUMBER()生成可以过滤的序号。在这种情况下,会为每个namelibrary生成序列号,并按最新的AccessedTime进行排序。最新记录的1上的值为rn

SELECT Name, Library, AccessedTime
FROM
(
    SELECT  Name, Library, AccessedTime,
            ROW_NUMBER() OVER ( PARTITION BY Name, Library
                                ORDER BY AccessedTime DESC) rn
    FROM    UserLibrary
) a
WHERE   a.rn = 1

答案 1 :(得分:1)

select Name, Library, max(AccessedTime) as 'AccessedTime'
from UserLibrary
group by Name, Library