MySQL如何查询根据某一条件分组,再查询出每组数据中时间最早或最晚的数据

这篇具有很好参考价值的文章主要介绍了MySQL如何查询根据某一条件分组,再查询出每组数据中时间最早或最晚的数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近遇到个需求,需要先根据A条件进行分组,然后查询出每组数据中时间最近的一条数据,立马就写出了sql语句

select * from (select * from b_equipment_maintenance  where
        equipment_id in (.......)
        ORDER BY create_time desc ) a  GROUP BY a.equipment_id

但是执行了一下,发现不对,子查询中 order by 貌似失效了,查出来的数据并不是要想要的时间最近的数据。
经过我的研究,发现,想要子查询中使用order by生效,必须满足三个条件:

1、外部查询禁止分组或者聚合
2、外部查询未指定having,HAVING, order by
3、外部查询将派生表或者视图作为from句中唯一指定源
不满足这三个条件,order by就会失效。

一旦外部表使用了group by,那么子查询将不会执行filesort操作(即order by 会失效)
那么,如何避免子查询order by 失效呢
解决办法是在子查询中使用distinct 来使order by生效

弄明白这些,sql语句就可以优化了

select * from (select DISTINCT(b.id) bid,b.* from b_equipment_maintenance b where
        b.equipment_id in (.......)
        ORDER BY b.create_time desc ) a  GROUP BY a.equipment_id

这样,就可以查询出每组数据中时间最近的数据了文章来源地址https://www.toymoban.com/news/detail-837381.html

到了这里,关于MySQL如何查询根据某一条件分组,再查询出每组数据中时间最早或最晚的数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL根据出生日期查询年龄,以及对年龄进行分组统计

    表stu数据如下 1. 根据出生日期查询年龄 返回结果: 函数DATE():提取日期或日期/时间表达式的日期部分; 函数CURDATE():返回当前的日期; 函数TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2):计算两个日期的时间差,unit是计算时间差的单位,可以是SECOND秒、MINUTE分钟、HOUR小时、DAY天

    2024年02月11日
    浏览(62)
  • mysql 分组后取每组最新数据

    统计业务情况下,需要分组取最新,下面记录两种mysql写法 方式一:使用 MAX() 函数来实现该功能 方式二:和方式一逻辑基本一致,只是将IN查询替换成了连接查询,实测百万级数据量相较于方式一提升50%,推荐使用此种方式

    2024年02月10日
    浏览(50)
  • 【JaveWeb教程】(20) MySQL数据库开发之 基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询 详细代码示例讲解

    在上次学习的内容中,我们讲解了: 使用DDL语句来操作数据库以及表结构(数据库设计) 使用DML语句来完成数据库中数据的增、删、改操作(数据库操作) 我们今天还是继续学习数据库操作方面的内容:查询(DQL语句)。 查询操作我们分为两部分学习: DQL语句-单表操作

    2024年02月02日
    浏览(81)
  • Mysql分组排序取每组第一条(二种实现方式)

    记录一下最近的一个需求,查不同产品排名第一的图片作为主图 其实一开始想用的是 mybatis的级联查询 ,结果说需要一次性全部查出来 那就没事了,改 sql 咯: 亲测实用 MySQL:8.0 Java:1.8 建表语句: 这一种也是网上推荐最多的,但个人觉得局限性太大,不介意用在实战上

    2024年02月06日
    浏览(40)
  • Mysql 数据库DQL 数据查询语言 SELECT 基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询——包含DQL所有查询语句。吐血分享。

    DQL:数据查询语言; 用来对表内的数据进行查找 。Database Query Language SQL语句分为:基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询。  可以发现name字段就只剩下一个张三了;   条件: 条件查询—比较运算符 比较运算符 功能 大于 = 大于等于 小于 = 小于等

    2024年01月19日
    浏览(53)
  • mysql查询一周内的数据(起始日期为星期一)、根据一周不同星期进行分组统计

    其中YEARWEEK ( time, 1) 获取的是时间的年以及是该年内的第几周,而其中的1则代表以星期一为一周的第一天。 不加1的情况就是,获取的数据是以星期日为一周的第一天的,与我们的需求不符。 直接在YEARWEEK ( now(), 1) 加上-1即是减一周,也就是上周。 数字1则代表星期一,2代表

    2024年02月13日
    浏览(48)
  • java根据分组函数GroupingBy进行多个条件组合分组

    在SQL中经常会用到分组,我们也常常遇到一些组合分组的场景。 java8分组 传统写法(单个字段分组) 场景:根据 城市 进行分组 使用的是方法引用:User::getCity 来完成分组 java8分组 传统写法(多个字段分组) 场景:根据 城市,性别进行分组 一般的写法会是下面的这种写法,

    2023年04月19日
    浏览(43)
  • MySQL使用GROUP BY分组后,获取每组中时间记录最新的行对应的其他字段

    在编写MySQL数据库查询语句时,经常遇到使用GROUP BY分组后,需要获取每组中时间记录最新的行对应的其他字段这一情况。例如下表(t_score): id student course score examdate 1 小张 语文 89.0 2023-06-29 2 小张 数学 90.0 2023-06-29 3 小张 语文 91.0 2024-01-10 4 小张 数学 93.0 2024-01-10 5 小李 语

    2024年01月17日
    浏览(35)
  • 第七单元 条件查询,分组查询

    条件查询是通过where子句进行检索的查询方式。   1. 如何使用排序(升序,降序)? asc :表示升序(默认排序方式) desc :降序 排序语法:select ... from 表名 [条件] order by 要排序的字段 asc/desc     2. 多字段如何排序? 语法: select ... from 表名 [条件] order by 第一要排序的字段 a

    2024年02月05日
    浏览(44)
  • Mysql 如何分组查询取最新的几种方案

    示例: SELECT * FROM ( SELECT *, row_number ( ) over ( PARTITION BY 分组字段 ORDER BY 排序字段 DESC ) AS rn FROM 表 ) pca WHERE pca.rn = 1 解释: 1. rn字段:返回的是分组内的结果排序依次递增 2. 分组字段:进行分组的字段 3. 排序字段:需要取最新逻辑的字段 注意: row_number函数得到的字段rn不能

    2024年02月06日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包