mysql - 编写一条 SQL 语句进行速度跟踪

标签 mysql sql database

我的任务是跟踪车辆的速度。我的数据库包含以下列:phoneid int、时间时间戳、纬度 double 、经度 double 、speed int。这些记录每隔几秒更新一次,我需要一个 SQL 语句来查找平均速度在 50 到 100 英里/小时之间至少一分钟的人。

数据是通过 GPS 跟踪记录器收集的。

有人可以建议我找出平均速度超过速度限制(即 50 到 100 英里/小时)至少一分钟的人吗?

我应该首先根据时间对记录进行分组,还是应该根据平均速度对它们进行分组

如果我将 Select 语句写为: 通过phoneid从Speed_track组中选择*,avg(speed); 那么我就可以仅根据速度获取记录

还有其他建议吗?

我可以使用哪些分析函数?

我可以为上面编写过程吗?

最佳答案

假设:对于时间接口(interface) t0 到 t1,您很乐意采用该间隔期间记录的所有速度观测值的平均值作为该间隔期间平均速度的表示。如果速度观察结果不规则,这可能不是一个好的假设,并且会使您的问题变得复杂。

SELECT * FROM
    (SELECT phoneid, 
    time, 
    (SELECT AVG(speed) FROM Speed_Track STI 
        WHERE STI.phoneid = STO.phoneid AND
           STI.time > TIMESTAMPADD(MINUTE, -1, STO.time)
           AND STI.TIME <= STO.time) as minute_rolling_avg
 FROM Speed_Track STO) POSSIBLE_SPEEDERS
 WHERE POSSIBLE_SPEEDERS.minute_rolling_avg > 50.0 
     AND POSSIBLE_SPEEDERS.minute_rolling_avg <= 100

这是一种蛮力。也许还有另一种方法。我很想找到一种方法来消除每部从未超过 50 的手机,以便不必计算它们的移动平均值。

关于mysql - 编写一条 SQL 语句进行速度跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42631455/

相关文章:

mysql - 合并具有不同列数的两个查询

php - LEFT 加入在一页中工作,但不在另一页中工作

sql - 将存储过程的结果附加到先前执行的存储过程

mysql - 如何选择字段具有特定值的所有记录,直到出现具有不同值的记录?

python - 如何用一个输入创建不同的条件(python)

php - 计算每个用户在系统上消耗的时间的有效方法

mysql - 从另一个查询的结果中向查询添加列

php - 与日期相关的 SQL 查询

java - JDBC 中的正则表达式

php - 从一个mysql表复制一行到另一个表,并修改字段值