mysql 查询上亿条数据库_Mysql查询最近一条记录的sql语句(优化篇)

Mysql查询最近一条记录的sql语句(优化篇)

发布时间:2020-08-30 17:25:20

来源:脚本之家

阅读:77

作者:一只阿木木

下策——查询出结果后将时间排序后取第一条

select * from a

where create_time<="2017-03-29 19:30:36"

order by create_time desc

limit 1

这样做虽然可以取出当前时间最近的一条记录,但是一次查询需要将表遍历一遍,对于百万以上数据查询将比较费时;limit是先取出全部结果,然后取第一条,相当于查询中占用了不必要的时间和空间;还有如果需要批量取出最近一条记录,比方说:“一个订单表,有用户,订单时间,金额,需要一次性查询所有用户的最近的一条订单记录”,那么每个用户一次查询就要做一次整表的遍历,数据大的情况下,时间将会以指数形式增长,不能投入实际使用。

中策——查询排序后group by

select * from (

select * from a

where create_time<="2017-03-29 19:30:36"

order by create_time desc

) group by user_id

后来发现使用group by 可以根据group by 的参数列分组,但返回的结果只有一条,仔细观察发现group by是将分组后的第一条记录返回。时间在查询后默认是顺序排列,因此需要先将时间倒序排列,方可取出距离当前最近一条。

这样查询实际上还是进行了两次查询,虽然时间上相比第一个方法有了质的飞跃,但是还可以进一步优化。

上策——将max() 方法和group by结合使用

select *,max(create_time) from a

where create_time<="2017-03-29 19:30:36"

group by user_id

这句可以理解为将结果集根据user_id分组,每组取time最大一条记录。这样就很好的实现了批量查询最近记录,并且仅仅需要遍历一次表,即使在数据量巨大的情况下也可以在很短的时间查出结果。

扩展:

现在有一张资产设备表:base_assets_turn

查询资产的最新保管人

注:假设资产编号   ASSETS_ID=254

下策:

select * from base_assets_turn

where ASSETS_ID = 254

order by create_time desc

limit 1

中策:

select * from ( select * from base_assets_turn

where ASSETS_ID = 254

order by create_time desc) tt GROUP BY tt.ASSETS_ID;

上策:

那么上策该如何书写呢,欢迎留言!

以上所述是小编给大家带来的Mysql查询最近一条记录的sql语句(优化篇),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要查询最近一条记录,可以使用ORDER BY和LIMIT子句。下面是MySQL查询最近一条记录SQL语句: SELECT * FROM 表名 ORDER BY id DESC LIMIT 1; 其中,"表名"是要查询数据库表的名称,"id"是表中的唯一标识列。通过将结果按id列的降序排列,可以将最新记录放在结果集的第一行。使用LIMIT 1可以限制结果集只返回一条记录。这样即可查询最近一条记录。 注意,上述语句中的id列是假设的列名,实际使用时需要根据具体的表结构来替换。另外,如果想要查询表中的特定字段而不是所有字段,可以将"*"替换为字段名称。 ### 回答2: 要查询最近一条记录SQL语句,可以使用以下代码: SELECT * FROM 表名 ORDER BY id DESC LIMIT 1; 在上述代码中,需要将"表名"替换为你想要查询的表的实际名称。这SQL语句的执行过程如下: 首先,使用SELECT *从表中选取所有的列。 然后,通过使用ORDER BY id DESC将结果按照id列的降序排序,这意味着最新的记录将位于最前面。 最后,通过使用LIMIT 1限制结果集的大小只为1,从而仅返回最新的一条记录。 这样,就可以通过这SQL语句查询最近一条记录。 ### 回答3: 要查询最近一条记录,可以使用以下的SQL语句: ``` SELECT * FROM 表名 ORDER BY 时间列名 DESC LIMIT 1; ``` 其中,表名是你要查询的表的名称,时间列名是表中记录时间的列名。 这个查询语句的作用是首先通过`ORDER BY`子句将记录按照时间列名降序排列,最近记录排在第一位。然后使用`LIMIT`关键字限制查询结果只返回第一条记录,即最近一条记录。 例如,如果我们有一个存储员工信息的表employee,其中有一个记录时间的列叫做create_time,我们可以使用以下的SQL语句查询最近一条记录: ``` SELECT * FROM employee ORDER BY create_time DESC LIMIT 1; ``` 这个查询语句会返回employee表中最近插入的一条记录的所有字段信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值