My SQL group by取同组第一条

5.6测试满足。

8.0测试不OK。

网上说的一套一套的,基本都是低版本MySQL5.6。

前情提示:

Mac OS10.14;

MySQL8.0.18;localhost;这里插一句,MySQL高版本5.7以后,sql_mode有变化,其中之一体现为,group by写法。可查看文章了解:

远程centOS6.8final,MySQL5.6;

表结构,数据都是一样;

测试SQL语句:

SELECT SwipeID,MemberID,AddTime FROM
(
SELECT * FROM front_membercardswipe fmcs
ORDER BY fmcs.AddTime ASC
) a
GROUP BY a.MemberID 

改变语句中子查询中的ASC或者DESC,可以清楚看到选择的是默认同组第一条,这样的话很容易先排序后分组,比如选择不同用户的最新、最早的某一记录;

5.6结果:

扫描二维码关注公众号,回复: 11392463 查看本文章

 8.0本地测试截图:与上图一一对应

看出问题了吗?8.0的最后一张,按想的排序再分组,应该是SwipeID=1、3、4. 

解决:

多搜索,多尝试,我感觉这些语法介绍说明都在5.7或者8.0官方文档里介绍了的,建议大家以后以官方更新文档为主。确实更新挺大的,让我不禁想到centOS6与centOS7,MacOS10.15与MacOS10.15Catalina。

8.0正确SQL示例:

 大致意思,在子查询中为了优化,order by需要和limit配合使用,否则会忽略order by。

其实解决办法还有其他的,比如结合具体实际业务,换种SQL写法,而不是使用子查询limit。

另外附送大家一条SQL:

SELECT * FROM front_membercardswipe fmcs ORDER BY fmcs.SwipeID,fmcs.AddTime 
SELECT * FROM front_membercardswipe fmcs ORDER BY fmcs.SwipeID DESC,fmcs.AddTime DESC 
SELECT * FROM front_membercardswipe fmcs ORDER BY fmcs.SwipeID DESC,fmcs.AddTime ASC 

猜你喜欢

转载自blog.csdn.net/qq_31708763/article/details/104418184