sql语句获取表中最新数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句获取表中最新数据相关的知识,希望对你有一定的参考价值。

在表中我要获取一个点位的例如:DLEG000024 (F_energyItemcode)最新时间的F_Hourvalue值

我不知道你的表叫什么,假如表名叫:A
select * from A where F_energyItemcode='DLEG000024' order by F_endHour DESC
通过上面时间倒序排列之后,将上面查询结果当成一个表,然后通过rownum=1 去获取,最新时间的F_Hourvalue值。
select F_Hourvalue from (select * from A where F_energyItemcode='DLEG000024' order by F_endHour DESC) where rownum=1;
参考技术A 用倒序,然后获取前几条就好

使用sql语句在mysql的表中随机获取数据

rand()获取随机数据问题

有时候会有这样的业务场景,随机获取几条数据,网上一搜有好多使用

select * from xxx order by rand() limit x

在数据量比较小的时候这个是没问题的,但是一旦数据量上来就会非常的慢
,我自己本地搞了900w+的数据,随机取6条就需要大概20s+。

原因是扫描了全表,这还了得。。。

在这里插入图片描述

在这里插入图片描述

解决方案

方法1:
mysql里的id一般都是聚簇索引,这个时候我们可以利用上id来做操作

建议查询10次以下用这个语句多次查询比一次rand()效率高的多,每次都是获取的不同的数据。
不直接limit 10的原因是这样获取的数据都是连续的id了。

select u.* from 
user u join (
	select ROUND(
		(rand() * (select max(id) from user) - (select min(id) from user)) + (select min(id) from user)
	) as id
) u2
where u.id >= u2.id
limit 1

在这里插入图片描述

方法2:
也可以这样操作,如果只需要获取100条,那么我们可以在方法1的基础上获取200条然后在内存中再随机取100条,这样也可以。

比如java可以直接利用

//洗牌
Collections.shuffle();

打乱List的顺序,然后捞指定数量的数据

以上是关于sql语句获取表中最新数据的主要内容,如果未能解决你的问题,请参考以下文章

MySQL SQL 获取表中的最新记录?

用SQL语句怎么从一个表中怎么获取最高工资的三个人

请教sql语句如何取得一个表中的列名,数据类型,及长度?

如何通过 SQL 语句从两个特定日期(由用户指定)之间的数据库表中获取数据?

使用sql语句在mysql的表中随机获取数据

SQL语句怎样进行数据库字段的条件查询?