我们都知道group by 会选择保留第一条数据,默认是按照id排序的,如果我们想通过别的字段排序,比如最后创建的那条记录,可以先按照创建时间降序,再group by即可得到每个分组的最新创建的数据。

例:

通过如下sql查出两条数据

SELECT * FROM xxx WHERE groupId = 11 ORDER BY effectiveDate DESC

现在group by id 看下结果

SELECT a.* FROM ( SELECT * FROM xxx WHERE groupId = 11 ORDER BY effectiveDate desc ) a GROUP BY a.groupId

发现默认返回的是id升序后的第一个结果,这个结果明显不对的,因为子查询已经按照 effectiveDate 降序了,应该返回的是id为3的那条才对,其实是因为mysql 5.7版本对这个查询进行优化了,认为子查询中的order by可以进行忽略,只要Derived table里不包含如下条件就可以进行优化:

UNION clause

GROUP BY

DISTINCT

Aggregation

LIMIT or OFFSET

链接:5.7中Derived table变形记

解决办法:

通过limit 语句使子查询的order by生效

SELECT a.* FROM ( SELECT * FROM xxx WHERE groupId = 11 ORDER BY effectiveDate desc limit 111111111) a GROUP BY a.groupId

现在结果是我们期望的结果了。但是这必须保证limit的数量,所以也可以使用DISTINCT实现。

mysql group by 无效_Mysql5.7版本group by 子查询中order by 无效的问题解决办法相关推荐

  1. oracle查询失效包sql,sql – ORA-00904:子查询中的标识符无效

    为什么下面的查询在oracle中不起作用? select * from ENTITY_OWNERSHIP EO where (select count (*) from ( select USER_I ...

  2. java 标识符无效_查询y子查询中的标识符无效

    以下查询返回错误: ORA-00904: "C"."CHARGEDATE": invalid identifier 00904. 00000 - "% ...

  3. 当WHERE子句、GROUP BY子句和HAVING子句同时出现在一个查询中时,SQL的执行顺序

    当WHERE子句.GROUP BY子句和HAVING子句同时出现在一个查询中时,SQL的执行顺序如下: (1) 执行WHERE子句,从表中选取行. (2) 由GROUP BY 子句对选取的行进行分组. ...

  4. MySQL开发技巧 第二禅(子查询中匹配两个值、解决同属性多值过滤的问题、计算累进税的问题)

    一.如何在子查询中匹配两个值 mysql子查询的使用场景及其好处 1.什么是子查询?             当一个查询是另一个查询的条件时,称之为子查询(可以在curd中) 2.常见的子查询使用场景 ...

  5. any在mysql语句中用法_MySQL中,子查询中可以使用运算符ANY,它表示的意思是______。...

    MySQL中,子查询中可以使用运算符ANY,它表示的意思是______. 答:至少一个值满足条件 以下能对一维数组a进行正确初始化的语句是[ ] 答:int a[ ]={0; int a[10]={1 ...

  6. any在mysql语句中用法,MySQL中,子查询中可以使用运算符ANY,它表示的意思是______。...

    MySQL中,子查询中可以使用运算符ANY,它表示的意思是______. 答:至少一个值满足条件 According to your textbook, the main purpose of a s ...

  7. mysql子查询中不能使用LIMIT

    mysql子查询中不能使用LIMIT /* 今天遇到个问题,如下: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/ ...

  8. Oracle子查询中含group by 和order by,排序字段为聚合列的别名+数值函数,外层count统计出错

    该问题猜测是个bug,19c版本执行结果正常,11g版本错误 建议:如果子查询中有group by 和order by,排序字段还需用数值函数处理,避免直接用别名 Oracle版本:11g 原始SQL ...

  9. mysql 子查询 排序_MySQL的子查询中排序

    起因 有一张表保存着用户对于文件的阅读记录, 包括文件名, 读者, 阅读时间, 时长, 备注评论. create table reading_record ( id int primary key a ...

最新文章

  1. Python - selenium_WebDriver 鼠标键盘事件
  2. java垃圾回收机制串行_Java垃圾回收机制
  3. Oracle的存储过程和存储函数
  4. 第二章java编程基础测试题_Java编程基础测试题分享
  5. JD商家后台管理的细节
  6. 存储知识:U盘的实际容量要比标注容量小,你知道原因吗?
  7. python基础一 day6 文件操作
  8. Python工作笔记-dictionary的遍历以及enumerate使用以及Py3中has_key的替代
  9. 在Python中处理大型文件的最快方法
  10. 重磅,企业实施大数据的路径
  11. c语言编程数字炸弹,C语言实现数字炸弹小游戏
  12. access设置 dolby_Dolby Access免费版
  13. 字符个数统计 java
  14. 2022年6月青少年软件编程(Python)等级考试试卷(一级)
  15. java课程设计 博客园_201521123098 JAVA课程设计
  16. php更改文件为只读,word只读模式怎么修改
  17. 自供电面包板----面包板伴侣项目介绍
  18. 最经典java使用Jedis操作Redis
  19. JQuery替换元素
  20. 线性插值(双线性)(三线性)

热门文章

  1. linux 基础命令2
  2. wince 6.0 设备管理器架构(Device Manager Architecture)
  3. Java LinkedList指南
  4. client高性能组件化框架React简单介绍、特点、环境搭建及经常使用语法
  5. 《Android 应用案例开发大全(第二版)》——2.6节绘制相关类
  6. Ubuntu 16.04 下安装Firefox的Flash插件
  7. Java文件路径(getResource)
  8. Centos 升级MySQL版本或者Yum安装Mysql5.6
  9. 最高科技——疯狂的前缀和
  10. 网站怎样留住浏览用户