@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对应的那条记录无法获取出来。这个方案也是我曲线解决方案里面的一种。但并不完美。
写下带不走的风
我造了模拟数据还原了现场: