車両追跡の「イン」時間と「アウト」時間のテーブルを生成するMySQLクエリがあります。
問題は、「入力」時間が「出力」時間と同じではないため、その間に秒または分が失われることです。
現在のselectを新しいselect内に埋め込む必要がある場合でも、「in」時間を前の行の「outtime」と等しく設定する方法はありますか?
15:45:14
下の画像で、最初の行のアウト時間がであり、次の行のインタイムがであることがわかります15:46:14
。したがって、この場合、1分はlost
実際には、車両が1つのポイントを離れた場合、それはすぐに次のポイントへの道を進んでいるので、前の列in
の時間と同じ時間を設定できます。out
このように、時間は決してありませんlost
私のクエリのSQLは次のとおりです。
select vehicle,InTime,OutTime from (select
PreQuery.callingname as vehicle,
PreQuery.geofence,
PreQuery.GroupSeq,
MIN( PreQuery.`updatetime` ) as InTime,
UNIX_TIMESTAMP(MIN( PreQuery.`updatetime`))as InSeconds,
MAX( PreQuery.`updatetime` ) as OutTime,
UNIX_TIMESTAMP(MAX( PreQuery.`updatetime`))as OutSeconds,
TIME_FORMAT(SEC_TO_TIME((UNIX_TIMESTAMP(MAX( PreQuery.`updatetime` )) - UNIX_TIMESTAMP(MIN( PreQuery.`updatetime`)))),'%H:%i:%s') as Duration,
(UNIX_TIMESTAMP(MAX( PreQuery.`updatetime` )) - UNIX_TIMESTAMP(MIN( PreQuery.`updatetime`))) as DurationSeconds
from
( select
v_starting.callingname,
v_starting.geofence,
v_starting.`updatetime`,
@lastGroup := @lastGroup + if( @lastAddress = v_starting.geofence
AND @lastVehicle = v_starting.callingname, 0, 1 ) as GroupSeq,
@lastVehicle := v_starting.callingname as justVarVehicleChange,
@lastAddress := v_starting.geofence as justVarAddressChange
from
v_starting,
( select @lastVehicle := '',
@lastAddress := '',
@lastGroup := 0 ) SQLVars
order by
v_starting.`updatetime` ) PreQuery
Group By
PreQuery.callingname,
PreQuery.geofence,
PreQuery.GroupSeq) parent
where (InTime> DATE_SUB('2013-03-23 15:00', INTERVAL 24 HOUR) or OutTime> '2013-03-23 15:00' ) and vehicle='TT08' order by InTime asc
MySQLの構文は非常に詳細ですが、はるかに単純なクエリでも実行できます。お気に入り
select vehicle, intime,outtime from vehicletimes
私の希望する結果は次のようなものです。
select vehicle, intime(outtime of row above),outtime from vehicletimes
時間の最初の行はそのままにすることができ、最後の行のアウトタイムはそのままにすることができます。最小の時間と最大の時間の間の毎秒を考慮する必要があります。
いつものように助けていただければ幸いです。
前もって感謝します