显示分组的MAX列 - 显示所有行

时间:2015-10-28 13:26:36

标签: mysql sql group-by aggregation

我在mysql中有一个数据库,我需要根据“GROUP BY”创建一个MAX(日期)列,但我想查看所有行。 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)来实现,但表的代码真的很长 - 我想知道是否有更优雅的方法可以做所以...

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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`