我是靠谱客的博主 高高鸭子,最近开发中收集的这篇文章主要介绍msyql group by 分组获取最新一条数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

当在开发环境中,偶尔会遇到一种情况,mysql table 中针对用同个户信息保存了多条记录,而我们想要获取最近更新的记录

在常规中我们单纯的使用 group by ,然而并没有达到目的

eg:

select phone, FROM_UNIXTIME(created_at) as time FROM cms_h5_user WHERE phone=15812859010

+-------------+---------------------+
| phone
| time
|
+-------------+---------------------+
| 15812859010 | 2018-07-31 18:57:12 |
| 15812859010 | 2018-09-10 14:45:23 |
| 15812859010 | 2018-09-10 14:46:06 |
+-------------+---------------------+

想取出 time = 2018-09-10 14:46:06 最新的记录

select phone, FROM_UNIXTIME(created_at) as time FROM cms_h5_user WHERE phone=15812859010 GROUP BY phone ORDER BY time DESC;

+-------------+---------------------+
| phone
| time
|
+-------------+---------------------+
| 15812859010 | 2018-07-31 18:57:12 |
+-------------+---------------------+

很明显,不是我们想要的数据,即使对 time 进行倒序排序

分析:

msyql 写的顺序:select ... from... where.... group by... order by..
mysql 执行的顺序:from... where...group by.... select ... order by...

由此可以看出 order by 取到的数据是已经分组后的结果,所以这个时候针对同一用户 order by 等于是无效的

解决方法:

使用子查询

select phone, FROM_UNIXTIME(created_at) from (SELECT * FROM cms_h5_user ORDER BY created_at desc) cms_h5_user WHERE phone=15812859010 GROUP BY phone;

+-------------+---------------------------+
| phone
| FROM_UNIXTIME(created_at) |
+-------------+---------------------------+
| 15812859010 | 2018-09-10 14:46:06
|
+-------------+---------------------------+

这样就能完美的解决

最后

以上就是高高鸭子为你收集整理的msyql group by 分组获取最新一条数据的全部内容,希望文章能够帮你解决msyql group by 分组获取最新一条数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部