如何在SQL中先排序后分组
原文地址入口
标题说的有点奇怪,换句话说是让order by比group by先执行。还不明白对吧?
举个例子:实现场景,要实现QQ空间的动态消息,首先要按最新的消息查到QQ好友排序,然后再按好友分别查询他们的动态消息
有如下的Feed表
id userid typemsg who time 1 2 add_twitterhahah 1 2010-04-27 19:12:38 2 2 add_twitter怎么啦 2 2010-04-27 19:12:44 3 4 add_twitterasddas 3 2010-04-27 19:20:26 4 2 reply_twitter放大法 4 2010-04-27 19:24:09 5 5 reply_twitter噶 5 2010-04-27 19:24:13 6 3 add_twittersaf 6 2010-04-27 19:35:48 7 2 add_twitter先谢谢谢谢谢谢 7 2010-04-27 19:54:44
现在想要,按时间先后,把用户的id查询出来,每个id只出现一次。
当然,第一时间就想到用group by语句来分组嘛
【如何在SQL中先排序后分组】
SELECT * FROM feed GROUP BY userid ORDER BY TIME
可是,得到的结果并不是自己想要的,group by比order by先解析了,结果就是得到最旧的那一条。
正确的方法 使用子查询
SELECT * FROM
(SELECT * FROM feed ORDER BY TIME) AS T
GROUP BY T.userid ORDER BY T.TIME
上面这句在mysql可以正常取值,但是在hibernate不能使用from 后面的子查询,杯具。。
换个折中的方法,以下方法只是为了取得userid而已
SELECT * FROM feed GROUP BY userid ORDER BY MAX(TIME)
推荐阅读
- 任时光绽放成六月繁花
- 我从来不做坏事
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 樱花雨
- 如何寻找情感问答App的分析切入点
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- 人如果没梦想,和咸鱼有什么区别(自媒体时代把握住就能咸鱼翻身)
- 如何在Mac中的文件选择框中打开系统隐藏文件夹