Mysql 存在多条数据时如何按时间取最新的那一组数据(思路详解)

 更新时间:2024年04月24日 09:05:22   作者:jerry-89  
这篇文章主要介绍了Mysql 存在多条数据时如何按时间取最新的那一组数据,本文给大家分享两种思路结合实例代码给大家介绍的非常详细,需要的朋友可以参考下

1、数据如下,获取每个用户最近的一次登录数据

思路1:order by + group by

  先根据UserId+LogInTime排序,再利用Group分组,即可得到每个User_Id的最新数据。

SELECT * FROM login_db l ORDER BY l.user_id, l.login_time DESC;

  排序结果:

  再对结果进行分组:

SELECT * FROM (
    SELECT *
    FROM login_db l
    ORDER BY l.user_id, l.login_time DESC
    ) lb
GROUP BY lb.user_id;

  得到的结果如下:

   从结果可知,这并不是我们预期的结果。因MySql版本的原因,对Group By进行了优化,导致前面的排序不再生效,而是保留了排序前的结果。

  为了使Group By根据我们排序后的结果进行分组,需要加入关键字Limit告诉MySql需要进行排序。

  修改之后的语句如下:

  
SELECT * FROM (
    SELECT *
    FROM login_db l
    ORDER BY l.user_id, l.login_time DESC LIMIT 100000
    ) lb
GROUP BY lb.user_id;

 得到了预期的结果:

   从SQL中,不难看出,这个方法存在一个缺陷,就是必须要保证原始数据在limit范围内,否则分组的结果就不会是全部的数据,结果自然也是不能保证的。

思路2:多表关联

  利用多表关联,同一纬度(User_Id)下的登录时间进行比较,得出最近的时间。

  
select b1.*
from login_db b1
where (select COUNT(1)
       from login_db b2
       where b2.user_id = b1.user_id and b1.login_time <= b2.login_time) <= 1;

到此这篇关于Mysql 存在多条数据时如何按时间取最新的那一组数据的文章就介绍到这了,更多相关Mysql 取最新数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解析优化MySQL插入方法的五个妙招

    解析优化MySQL插入方法的五个妙招

    本篇文章是对优化MySQL插入方法的五个妙招进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL 联合索引与Where子句的优化 提高数据库运行效率

    MySQL 联合索引与Where子句的优化 提高数据库运行效率

    网站系统上线至今,数据量已经不知不觉上到500M,近8W记录了。涉及数据库操作的基本都是变得很慢了,这篇文章主要是说明配置并不是数据库操作慢的主要原因
    2012-01-01
  • MySQL日期时间函数知识汇总

    MySQL日期时间函数知识汇总

    这篇文章主要介绍了MySQL日期时间函数知识汇总,这不同数据库之间基本相同,只会有个别函数的差异。下文详细介绍,需要的小伙伴可以参考一下
    2022-03-03
  • 检查MySQL中的列是否为空或Null的常用方法

    检查MySQL中的列是否为空或Null的常用方法

    在MySQL数据库中,我们经常需要检查某个列是否为空或Null,空值表示该列没有被赋值,而Null表示该列的值是未知的或不存在的,在本文中,我们将讨论如何在MySQL中检查列是否为空或Null,并探讨不同的方法和案例,需要的朋友可以参考下
    2023-11-11
  • 详解Mysql中的视图

    详解Mysql中的视图

    mysql中的视图,视图与表有很多相似的地方,视图也是由若干个字段以及若干条记录构成,视图也可以作为select语句的数据源
    2017-04-04
  • MySQL排序优化详细解析

    MySQL排序优化详细解析

    这篇文章主要介绍了MySQL排序优化详细解析,MySQL有两种方式生成有序的结果:1.通过排序操作;2.按索引顺序扫描,如果EXPLAIN出来的type列的值为"index",则说明使用了索引扫描来做排序,需要的朋友可以参考下
    2024-01-01
  • 超越MySQL 对流行数据库进行分支的知识小结

    超越MySQL 对流行数据库进行分支的知识小结

    尽管MySQL是最受欢迎的程序之一,但是许多开发人员认为有必要将其拆分成其他项目,并且每个分支项目都有自己的专长。该需求,以及 Oracle 对核心产品增长缓慢的担忧,导致出现了许多开发人员感兴趣的子项目和分支
    2012-01-01
  • MySQL实现统计过去12个月每个月的数据信息

    MySQL实现统计过去12个月每个月的数据信息

    这篇文章主要介绍了MySQL实现统计过去12个月每个月的数据信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • sql ROW_NUMBER()与OVER()方法案例详解

    sql ROW_NUMBER()与OVER()方法案例详解

    这篇文章主要介绍了sql ROW_NUMBER()与OVER()方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Navicat出现无法远程连接MySql服务器问题的解决办法

    Navicat出现无法远程连接MySql服务器问题的解决办法

    这篇文章主要介绍了Navicat出现无法远程连接MySql服务器问题的解决办法,文章通过思路判断出现问题的情况,然后进行逐一排查,确定问题出现的原因并给出解决办法,本文对此问题的解决介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08

最新评论