MySQL - 大 table 计算车辆平均速度

MySQL - Large table calculate vehicle average speeds

我有一个大的 table,结构如下:

dt veh_id lat long
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 lat long Time Distance (Miles) Speed (MPH)
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

这是非常多的行,目前数据只有 table 天,每个 table 包含 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, veh_id, lat, lon,
        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;

我可能把距离公式弄错了,我没有得到和你一样的数字。

fiddle