请教一个mysql的分组排序问题
tab表如下:
id pubid userid uid msgText msgTime
1 4 1 3 ddd 2015
2 4 3 1 eee 2015
3 3 1 2 abc 2015
4 3 1 2 aaa 2015
5 3 2 1 bbb 2015
6 3 2 1 aaa 2015
7 3 2 1 uuu 2015
8 5 1 4 ooo 2015
9 5 1 4 qaq 2015
已知传递来的一个变量为1。
我希望条件为userid=1 or uid=1
并且以pubid进行分组
排序以id来desc
得出的结果应该为下面这3条
id pubid userid uid msgText msgTime
9 5 1 4 qaq 2015
7 3 2 1 uuu 2015
2 4 3 1 eee 2015
目前我写的sql为:
select max(id) id,msgText,msgTime from tab where userid='1' or uid='1' group by pubid order by id desc
但好像不对 虽然id是对的 但msgText,msgTime不是对应的,有可能会变成:
9 5 1 4 ooo 2015
按理说我要的是
9 5 1 4 qaq 2015
忘大神写一个正确的mysql查询 感激不尽!
id pubid userid uid msgText msgTime
1 4 1 3 ddd 2015
2 4 3 1 eee 2015
3 3 1 2 abc 2015
4 3 1 2 aaa 2015
5 3 2 1 bbb 2015
6 3 2 1 aaa 2015
7 3 2 1 uuu 2015
8 5 1 4 ooo 2015
9 5 1 4 qaq 2015
已知传递来的一个变量为1。
我希望条件为userid=1 or uid=1
并且以pubid进行分组
排序以id来desc
得出的结果应该为下面这3条
id pubid userid uid msgText msgTime
9 5 1 4 qaq 2015
7 3 2 1 uuu 2015
2 4 3 1 eee 2015
目前我写的sql为:
select max(id) id,msgText,msgTime from tab where userid='1' or uid='1' group by pubid order by id desc
但好像不对 虽然id是对的 但msgText,msgTime不是对应的,有可能会变成:
9 5 1 4 ooo 2015
按理说我要的是
9 5 1 4 qaq 2015
忘大神写一个正确的mysql查询 感激不尽!
...全文
相关推荐
Mysql利用group by分组排序
总之,Mysql的`GROUP BY`分组排序功能为我们提供了一种有效的方式来处理复杂的数据排序和选择问题,尤其是在需要找到每个分组的“最值”时。
详解MySQL分组排序求Top N
而排序则用于确定查询结果的显示顺序,可以基于一个或多个列进行升序(ASC)或降序(DESC)排列。在分组排序求Top N的问题中,我们不仅要对数据进行分组,还要在每个分组内找到排名最高的N个记录。
MySQL优化篇:排序分组优化.pdf
为了解决这个问题,MySQL 4.1之后引入了单路排序,这种算法一次磁盘扫描就可以获取所有需要的列,减少了I/O操作,但可能会因为排序空间不足而导致性能问题。
MySQL分组排序功能
### MySQL分组排序功能#### 知识点概述MySQL是一种广泛使用的开源关系数据库系统,因其性能稳定、易于管理等特点而受到开发者的喜爱。
Mysql取分组后的每组第一条数据
解决这个问题的一种方法是通过创建一个已排序的临时表,然后再进行分组操作。这个临时表可以是通过子查询或者自连接来构建的,确保数据按所需的顺序排列。


