【问题标题】:Getting the most recent of a group of repeated rows获取一组重复行中的最新行
【发布时间】:2013-10-30 11:19:29
【问题描述】:

我有一个表'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 中做到这一点

【问题讨论】:

    标签: sql-server-2008


    【解决方案1】:
    select Name, Library, max(AccessedTime) as 'AccessedTime'
    from UserLibrary
    group by Name, Library
    

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

      • 谢谢,伙计...这是我得到的最快答案:-)
      • 如果您有更多其他列具有不同的值,这会有所帮助。
      猜你喜欢
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 2021-02-04
      相关资源
      最近更新 更多