我的任务是跟踪车辆的速度。我的数据库包含以下列:phoneid int, time timestamp, latitude double precision, longitude double precision,speed int
。每隔几秒钟就会更新这些记录我需要一个SQL语句,它可以找到平均速度在50到100英里/小时之间的人,至少一分钟。
通过GPS跟踪记录器收集数据。
任何人都可以建议我找出平均速度超过限速(即50至100英里/小时)至少一分钟的人。
我应该先根据时间对记录进行分组,还是应该用平均速度对其进行分组
如果我将Select语句写为:
select *,avg(speed) from Speed_track group by phoneid;
那么我只能根据速度获取记录
还有其他建议吗?
我可以使用哪些分析功能?
我可以为上面写proc吗?
答案 0 :(得分:0)
假设:对于时间界面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的电话,以节省必须为它们计算移动平均值。