0

GPS デバイスから多くのレコードを取得しています。これを地図上にルートとして表示する必要があります。レコード間の時間が 5 分を超えない場合、レコードはルートを結合します。

私のデータベースが次のようになっているとしましょう:

id       date
-------  ---------------------
1        2013-01-10 11:00:00.0
2        2013-01-10 11:01:15.0
3        2013-01-10 11:02:15.0
4        2013-01-10 11:03:15.0
5        2013-01-10 11:04:45.0
6        2013-01-10 11:15:00.0
7        2013-01-10 12:00:00.0
8        2013-01-10 12:00:50.0

この場合、レコード 1 ~ 5 と 7 ~ 8 でルートを形成する必要があります。

このクエリを作成しようとしていますが、行き詰まっています。データベースの後でなんとか操作を実行できましたが、それは望ましくありません (すべてのレコードを取得する必要があるなど)。

誰かがこれに対する解決策を持っていますか?

4

1 に答える 1

1

各エントリを後続のエントリと比較するだけで、個々のセグメントを取得できます

SELECT 
    f.ID AS from_ID,
    t.ID AS to_ID
FROM
    GPSTable AS f 
JOIN GPSTable AS t
    ON f.ID = t.ID-1 
WHERE
    TIMESTAMPDIFF(SECOND, f.Date, t.Date) < 300
;

エントリ (A,B) と別のエントリ (B,C) が存在する場合、(A->B->C) からのパスがあることがわかります。

次のステップは、これらすべてのパス セグメントを収集することです。これは再帰クエリで実行できますが、mySQL には詳しくありません。

于 2013-03-20T07:14:54.087 に答える