2

テーブルがあり、 と の日時フィールドがintimeありouttimeます。

私がしたいのは、クエリを使用してテーブルをループし、intime を前のレコードの outtime に変更することです。

このようにして、「時間の損失」なしでデータを一定に流れることができます

下の画像は、現在のテーブルと達成したいことを示しています。

ここに画像の説明を入力この例のフィドルはhttp://sqlfiddle.com/#!2/40b10/10 にあります。

これで、テーブルの設計などが最適ではないことがわかりました。これを機能させる方法のロジックを探しているだけです。

要約する。

inTime現在のインタイムより前の最新のインタイムに等しくするにはどうすればよいouttimeですか?

私がやろうとしていることの論理は以下の通りですが、正しく動作しません...

4

1 に答える 1

1

は、最初のものを正しくifnull表示するためだけに必要です。intime

SELECT mov.vehicle,
       ifnull((SELECT max(temp.outtime)
               FROM movement temp
               WHERE temp.outtime< mov.intime),mov.intime) as intime_calc,
       mov.outtime
FROM movement mov
ORDER BY mov.intime

http://sqlfiddle.com/#!2/40b10/23

intimeがすでに前のレコードと等しいレコードがいくつかある場合はouttime、クエリを次のように変更できます。

SELECT mov.vehicle,
       ifnull((SELECT max(temp.outtime)
               FROM movement temp
               WHERE temp.outtime<= mov.intime
               AND mov.ID <> temp.ID),mov.intime) as intime_calc,
       mov.outtime
FROM movement mov
ORDER BY mov.intime
于 2013-04-30T15:06:35.860 に答える