2012-05-09 33 views
0

私は次のような問題があります:車両が動いている頂点とエッジを持つネットワークがあります。車両が頂点に達するたびに、現在のタイムスタンプと頂点および車両IDがデータベースに記録されます。私は車両が2つの頂点の間に必要とする時差のあるテーブルが必要です。開始時刻と終了時刻を生成するデータベーステーブルの時間列を使用する

注:エントリは、タイムスタンプで昇順に記録されますが、必ずしもcar_idsとcrossing_idsである必要はありません。

例:

| ID | Car_id | Crossing_id |  TIMESTAMP  | 
| 1 | 1 |  1  | 2010-09-25 05:20:00 | 
| 2 | 1 |  2  | 2010-09-25 05:23:00 | 
| 3 | 2 |  1  | 2010-09-25 05:25:00 | 
| 4 | 1 |  3  | 2010-09-25 05:35:00 | 
| 5 | 2 |  5  | 2010-09-25 05:42:00 | 

募集結果:

| Car_id | Crossing_id_start | Timestamp_start | Crossing_id_end | Timestamp_end | 
| 1  |   1   | 2010-09-25 05:20:00 |   2  | 2010-09-25 05:23:00 | 
| 1  |   2   | 2010-09-25 05:23:00 |   3  | 2010-09-25 05:35:00 | 
| 2  |   1   | 2010-09-25 05:25:00 |   5  | 2010-09-25 05:35:00 | 

例試験データ:

DROP TABLE IF EXISTS "test"; 
CREATE TABLE "test" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , "car_id" TEXT NOT NULL , "crossing_id" TEXT NOT NULL , "time" DATETIME); 
INSERT INTO "test" VALUES(1,'car_1','crossing_1','2010-09-25 05:20:00'); 
INSERT INTO "test" VALUES(2,'car_1','crossing_2','2010-09-25 05:23:00'); 
INSERT INTO "test" VALUES(3,'car_2','crossing_1','2010-09-25 05:25:00'); 
INSERT INTO "test" VALUES(4,'car_1','crossing_3','2010-09-25 05:35:00'); 
INSERT INTO "test" VALUES(5,'car_2','crossing_5','2010-09-25 05:42:00'); 

任意の助けを大幅に高く評価されています。最も好ましいのはsqliteですが、他のSQLデータベースのヒントも歓迎します!私は、正確なsqliteの構文を持っていないが、私は二段階でこの近づくだろう事前に

おかげで、 杉

答えて

0

...

  1. カーソルまたは一時テーブルにデータを入れてために、あなたはcrossing_id_start aで埋める行以上

    SELECT Car_id, Crossing_id, TIMESTAMP FROM Example ORDER BY Car_id ASC, Crossing_id ASC

  2. 反復それを必要とします現在のレコードのcar_idが前のレコードと同じである限り、crossing_id_startがcrossing_id_endになる新しいテーブルのnd crossing_id_end。

0

一つの可能​​な解決策には、番号が連続していることがわかっている場合

select 
    t1.ID as Car_id, 
    t1.Crossing_id as Crossing_id_start, 
    t1.TIMESTAMP as Timestamp_start, 
    t2.Crossing_id as Crossing_id_end, 
    t2.TIMESTAMP as Timestamp_end 
from table t1 
join table t2 on t1.ID = t2.ID and t1.Crossing_id = t2.Crossing_id + 1 
order by Crossing_id_start, Crossing_id_end 
関連する問題