如何解决MySQL - 大表计算车辆平均速度
我有一个具有以下结构的大表:
dt | veh_id | 纬度 | 长 |
---|---|---|---|
2021-01-14 13:00:00 | 123456ABC | 26.56602763823091 | 2.937412284992731 |
2021-01-14 13:00:00 | 1762GH | 26.56602763823091 | 2.937412284992731 |
2021-01-14 13:00:00 | 189725FT | 26.56602763823091 | 2.937412284992731 |
2021-01-14 13:52:07 | 123456ABC | 27.03312220493411 | 2.6008171450629343 |
2021-01-14 14:02:27 | 123456ABC | 27.195391148992073 | 2.490953866466876 |
我想计算(如果可能)是基于相同车辆 ID 行驶的额外行数。
dt | veh_id | 纬度 | 长 | 时间 | 距离(英里) | 速度(英里/小时) |
---|---|---|---|---|---|---|
2021-01-14 13:00:00 | 123456ABC | 26.56602763823091 | 2.937412284992731 | 0 | 0 | 0 |
2021-01-14 13:00:00 | 1762GH | 26.56602763823091 | 2.937412284992731 | |||
2021-01-14 13:00:00 | 189725FT | 26.56602763823091 | 2.937412284992731 | |||
2021-01-14 13:52:07 | 123456ABC | 27.03312220493411 | 2.6008171450629343 | 00:52:07 | 39.5 | 45.4 |
2021-01-14 14:02:27 | 123456ABC | 27.195391148992073 | 2.490953866466876 | 00:06:20 | 13.2 | 76.6 |
这是在非常多的行上,目前数据仅在天表中,每个表包含 1 天。但是,这可能会合并以在多天内运行此查询。我对任何超过特定速度的车辆感兴趣,因此在此列中过滤会很棒。
提前感谢你们这些非常聪明的人。 :)
此数据位于 MariaDB (10.3)(数据库中,但可以导出到任何内容以帮助我实现这一目标。 我不知道从哪里开始,并尝试在 Power BI 中使用一些措施运行它,这些措施取得了一些部分成功,但内存不足,并且花了几天的时间尝试我现在几乎放弃了。
我是 MySQL 的新手,虽然我可以使用基本命令,但我从未尝试过这样的事情,甚至不确定是否可能?感谢任何帮助或指导。
解决方法
你会做这样的事情:
select dt,veh_id,lat,lon,sec_to_time(secs) time,round(distance,1) distance,round(if(secs,distance/secs*3600,0),1) speed
from (
select dt,timediff(dt,coalesce(lag(dt) over w,dt)) secs,coalesce(
(3958.7613*(2*ASIN(SQRT(POWER(SIN(((lat-lag(lat) over w)*0.017453293)/2),2)+COS(lat*0.017453293)*COS((lag(lat) over w)*0.017453293)*POWER(SIN(((lon-lag(lon) over w)*0.017453293)/2),2))))),0) distance
from a_large_table
window w as (partition by veh_id order by dt)
) add_lag;
我可能弄错了距离公式,我没有得到与您相同的数字。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。