0

我有一个表'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 服务器中执行此操作

4

2 回答 2

1

您可以使用ROW_NUMBER()which 生成可以过滤的序列号。在这种情况下,为每个name和生成序列号,library并按最新的AccessedTime. 最新记录的值为1on 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
于 2013-10-30T11:21:26.690 回答
1
select Name, Library, max(AccessedTime) as 'AccessedTime'
from UserLibrary
group by Name, Library
于 2013-10-30T11:48:30.487 回答