mysql分组查询的依据,mysql查询问题,分组依据和排序依据问题

@yilin6263 你好,想跟你请教个问题:我用mysql查询的时候,想先order by 然后在group by。其中order by的条件和 groupby 的条件是不一样的。但是结果不是我想要的。请问有什么玄机吗?举例:select * from (select *from a order

@译林6263你好,我想问你一个问题:

我用mysql查询的时候,想先按顺序,再按组。其中by的排序条件不同于groupby。但是结果并不是我想要的。有什么玄机吗?

示例:

选择*从(

从按a . add _ time desc//的顺序中选择*如果此查询有三个结果id=1,我想先按add _ time排序,然后通过下面的分组方式得到时间最长的一个

)t按t.id分组

结论:

您得到的不是order by之后的第一项,而是默认情况下按id排序的第一项。

写下带不走的风

知乎上面众多大佬也是没有法子。。。不知道这里有没有。https://www.zhihu.com/question/20863388

wjiali6

这个语句能跑,不报语法错误感觉很神奇,grouo by id ,后应该是会以id为主键去生成汇总后的数据,但这是一条select *语句,不是一个组合函数。

另外,先排序再组合有些不合逻辑

aoliiiiii

2019/04/17 13:31

回复 @写下带不走的风 : 楼主你好,我在工作业务中也遇见需要在动态数据中取最近时间/最早时间对应的数据,因此也是使用了GROUP_CONCAT (Order By) 和 SUBSTRING_INDEX 函数,但是我是同时取时间,以及时间对应的用户或者其他信息,但是我现在实践的时候报表非常长,而且查询很慢,在SSRS上报表呈现几乎是不可能的。 请问你目前就这个部分有没有新的优化呢。谢谢!

写下带不走的风

2019/02/02 13:27

真实业务就是有这种需求,目前我用了一种投机取巧的办法实现了。用group_concat我想要的那个字段(排序拼接)。然后查询结果再使用SUBSTRING_INDEX截取第一位

写下带不走的风

2019/02/02 13:26

这个select * 只是示例。因为和查询出来的字段没关系所以我省略了。你可以理解成这个只是伪代码。

金浩亮

先group

by id

查出 max(time),id

当新表 , 然后在排序 找。。

写下带不走的风

昨天 16:46

你的方法可以,我找到了2种临时方案解决的。你这个算一种

开源中国首席动弹

先group by,再order by,group by后边的字字段要么查询字段要么是组函数

0x0110

分组后排序需要插入序列号重新排序

yilin6263

没太理解需求,一般都是先groupby再orderby,如果你的需求是找出每组id里面时间最大的一条。那sql可以写成

select

max(time),id from a

group by id

写下带不走的风

昨天 16:47

这种不行。直接max(time),id 出来的id不是时间最大的那条记录的id

java大神起床啦

只能

同时

让一个

索引 生效

建议 最后 使用limit 1

demoeg

这个貌似mysql能支持,oracle不能支持。

写下带不走的风

引用“译林6263”的评论

没太理解需求,一般都是先groupby再orderby,如果你的需求是找出每组id里面时间最大的一条。那sql可以写成

select

max(time),id from a

group by id

首先,感谢回答。select max(time)的方案,虽然能够获取最大time。但是最大time对应的那条记录无法获取出来。这个方案也是我曲线解决方案里面的一种。但并不完美。

写下带不走的风

我造了模拟数据还原了现场:

f2a4eae69098aefd237c76bdf1d5d43f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值