mysql顺序后跟group by

时间:2016-06-25 08:44:17

标签: mysql

所以我要将我的服务器迁移到新机器上。我在新机器上安装较新版本的mysql 5.7.13,而旧版本的mysql 5.5.13。并且有一个查询不像以前那样工作 使用与先前服务器相同的数据

select * 
  from
     ( select * 
         from user_config 
        where username like '%' 
          and updatetime <= '2500-01-01 00:00:00' 
        order 
           by updatetime desc
     ) x 
 group 
    by username;

mysql 5.5.13按我的意思工作,它加载每个用户的最新配置设置。但是5.7.13会加载每个用户的最旧配置设置

为什么会这样?

我试图运行子查询并且它可以正常工作但是当我结合上面的查询时它不起作用

示例数据

username|value|updatetime
a       |  100|2014-01-01 00:00:00
b       |   85|2014-06-01 00:00:00
a       |  150|2016-05-01 00:00:00
c       |   50|2016-06-01 00:00:00
c       |   75|2016-06-23 00:00:00

我需要的结果是

a|150
b|85
c|75

2 个答案:

答案 0 :(得分:2)

SELECT x.* 
  FROM my_table x
  JOIN 
     ( SELECT username
            , MAX(updatetime) updatetime
         FROM my_table
        GROUP 
           BY username
     ) y
    ON y.username = x.username
   AND y.updatetime = x.updatetime;

答案 1 :(得分:0)

在子查询中使用order by和limit 1来获得所需的结果:

select * from user_config t1
Where updatetime=(select updatetime from user_config x where x.username=t1.username order by updatetime desc limit 1);