mysql - 每组前两名之间的 Sql 差异
问题描述
我在 mysql 数据库中有一个数据表,其中包含时间序列数据
**Table Sensor Data**
ID uuid server_time
1 a 2021-07-29 11:36:15
2 b 2021-07-29 11:36:15
3 a 2021-07-29 12:36:15
4 b 2021-07-29 11:39:15
5 a 2021-07-29 13:36:15
我想找到每个 uuid 的两个最新数据的 server_time 之间的时间差(以分钟为单位)。因此,对于 a 而言,它将在 2021-07-29 13:36:15、2021-07-29 12:36:15 之间,对于 b 而言,它将在 2021-07-29 11:39:15、2021-07- 之间29 时 11 分 36 分 15 秒。查询应该足够高效,因为表中有超过 200 万条记录。我愿意添加索引以提高性能。
解决方案
您可以使用row_number()
和聚合:
select uuid,
max(server_time) as latest_server_time,
min(server_time) as penultimate_server_time,
timestampdiff(second, min(server_time), max(server_time)) as diff_seconds
from (select t.*,
row_number() over (partition by uuid order by server_time desc) as seqnum
from t
) t
where seqnum <= 2
group by uuid
having count(*) >= 2;
您可能需要在(uuid, server_time desc)
.
推荐阅读
- php - 如何在mysql存储过程中foreach数组
- amazon-web-services - 无法创建 Spot 实例
- pandas - 用于神经网络的 jupyter notebook、keras、tensorflow 中的 ValueError
- dart - 如何根据颤动中的触摸事件移动custompainter
- java - 来自json响应的Gson返回空数组列表
- javascript - 如何以角度获得图像的扩展?
- python - 优化图搜索算法
- amazon-web-services - AWS Transit Gatway 连接一个区域中的多个 VPC(新 AWS 服务)
- c# - 如何在列表中搜索给定项目的列表是否以相同的顺序存在
- android - 在 ConstraintLayout 中等距分布视图