【问题标题】:Getting the most recent record of a group获取组的最新记录
【发布时间】:2012-04-10 04:08:16
【问题描述】:

在进行内部连接后,我正在尝试查找组的最新记录。

假设我有以下两个表:

dateCreated | id
2011-12-27  | 1
2011-12-15  | 2
2011-12-17  | 6
2011-12-26  | 15
2011-12-15  | 18
2011-12-07  | 22
2011-12-09  | 23
2011-12-27  | 24


  code      | id
    EFG     | 1
    ABC     | 2
    BCD     | 6
    BCD     | 15
    ABC     | 18
    BCD     | 22
    EFG     | 23
    EFG     | 24

我只想显示最近的分组:

所以结果是:

dateCreated | code
2011-12-27  | EFG
2011-12-15  | ABC
2011-12-26  | BCD

我知道这可以使用maxgroup by 函数来实现,但我似乎无法得到想要的结果。

【问题讨论】:

    标签: sql sql-server-2008 tsql group-by


    【解决方案1】:

    假设您的表名为 ab,试试这个:

    select max(a.dateCreated) as dateCreated, b.code
    from a join b on a.id = b.id
    group by b.code
    

    【讨论】:

      【解决方案2】:

      我认为这应该能让你到达那里:

      select max(a.dateCreated) as dateCreated
          , b.code
      from table1 a
          join table2 b on a.id = b.id
      group by b.code
      

      【讨论】:

      • 是的,这就是我需要的全部欢呼,我会在允许时将其标记为正确
      【解决方案3】:

      您可以为此使用分析函数。这样,您仍然为每个代码只选择一个结果,即使它们是最后一个 dateCreated 相同的两个结果(这可能是您实际想要的结果,也可能不是)

      SELECT Code, dateCreated
      FROM (  SELECT T2.Code, T1.dateCreated, ROW_NUMBER() OVER(PARTITION BY T2.Code ORDER BY T1.dateCreated DESC) Corr
              FROM Table1 T1
              INNER JOIN Table2 T2
              ON T1.id = T2.id) A
      WHERE Corr = 1
      

      【讨论】:

        猜你喜欢
        • 2013-07-27
        • 1970-01-01
        • 2022-12-04
        • 2020-02-28
        • 2018-11-22
        • 1970-01-01
        • 1970-01-01
        • 2016-11-26
        相关资源
        最近更新 更多