mysql - 显示分组依据的最大列 - 显示所有行

标签 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 by”让我只剩下两行...... 谢谢!

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

最佳答案

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

  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

关于mysql - 显示分组依据的最大列 - 显示所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33392298/

相关文章:

mysql - 如何正确循环 MySQL 上的存储函数?

sql - 执行准备好的语句的方法

php - 如何获取相似项目的列表

MongoDB 按功能分组

mysql - (JavaFx+PHPMyAdmin) 连续执行两个方法时出现 SQL 异常(SELECT 然后 INSERT)

mysql - MySQL 中的 utf8_general_ci 和 utf8_unicode_ci 有什么区别?

c# - 数据不会永久保存到 SQL 表中

mysql - 我该如何优化这个查询?

r - 选择具有其他列的特定值的列的不同值

php - php 和 mysql 页面中的性能问题