2017-03-06 3 views
0

私は車の速度を追跡するタスクがあります。私はphoneid int, time timestamp, latitude double precision, longitude double precision,speed intで構成される列を持つデータベースを持っています。これらのレコードは数秒ごとに更新されます。平均速度が50〜100mphの人を少なくとも1分間見つけ出すSQL文が必要です。スピードトラッキングのためのSQLステートメントを書く

データはGPSトラッキングロガーによって収集されます。

平均スピードが制限を超えている(つまり、50〜100mph)人を少なくとも1分間見つけ出すことができます。

私はAS SELECT文を記述する場合I最初のグループのレコードは、時間に基づいて、または私は平均速度

のグループにそれらをすべきである必要があります。 select *,avg(speed) from Speed_track group by phoneid; 、私は唯一の

速度に基づいてレコードをフェッチすることができるだろうその他の提案はありますか?

私はどのような分析機能を使用できますか?

上記のようにprocを書くことはできますか?

+2

列車に乗っていないことをどのように知っていますか?または、25 mphの作業区域で?緯度と経度はどれほど正確ですか?データ型は何ですか?もし彼らが下り坂に行くのなら? –

+2

...これはどちらの国ですか?ちょうど好奇心が強い...私は心配することが何もないように... – SqlZim

+0

これはおそらく車のセンサーからのデータです。 – Hogan

答えて

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を超えていない電話をすべて排除する方法を見つけたいと思うでしょう。

関連する問題