【问题标题】:show MAX column for group by - show all rows显示分组依据的 MAX 列 - 显示所有行
【发布时间】:2016-01-28 07:12:08
【问题描述】:

我在 mysql 中有一个数据库,我需要根据“GROUP BY”创建一个 MAX(date) 列,但我想查看所有行。 PK 是组,开始日期。我想找到每个组的 max(StartDate) - 但仍然可以查看所有记录,例如:

group   |  StartDate  |  MAX(StartDate)
  1     |  2015-10-01 |   2015-10-20
  1     |  2015-10-10 |   2015-10-20
  1     |  2015-10-20 |   2015-10-20
  2     |  2015-09-24 |   2015-10-05
  2     |  2015-10-05 |   2015-10-05

我该怎么做?在 group 上使用“group by”让我只有 2 行... 谢谢!

编辑:我知道我可以通过将表与自身连接并在连接表中计算 MAX(StartDate) 来做到这一点,但表的代码真的很长 - 我想知道是否有更优雅的方法所以...

【问题讨论】:

    标签: mysql sql group-by aggregation


    【解决方案1】:

    您可以使用变量执行此操作,而无需两次加入表格:

      select t.*,
             (@d := if(@g = `group`, @d,
                       if(@g := `group`, startdate, startdate)
                      )
             ) as maxdate
      from table t cross join
           (select @g := '', @d := '') params
      order by `group`, startdate desc
    

    【讨论】:

      【解决方案2】:
      select t1.*, t2.m_date
      from your_table t1
      join
      (
        select  `group`, max(startdate) as m_date
        from your_table
        group by `group`
      ) t2 on t1.`group` = t2.`group`
      

      【讨论】:

      • 我想过 - 但基本表 id 的代码真的很长,包含许多连接,它只是一个庞大的代码......我现在想如果有另一种方式,所以代码会看起来更“优雅”
      猜你喜欢
      • 1970-01-01
      • 2013-01-26
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多