sql语句获取表中最新数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句获取表中最新数据相关的知识,希望对你有一定的参考价值。
在表中我要获取一个点位的例如:DLEG000024 (F_energyItemcode)最新时间的F_Hourvalue值
我不知道你的表叫什么,假如表名叫:Aselect * 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语句获取表中最新数据的主要内容,如果未能解决你的问题,请参考以下文章