我有一个 MySQL 查询,它为我的车辆跟踪“进出”时间生成一个表。
问题是“进入”时间与“退出”时间不同,因此在两者之间会丢失几秒钟或几分钟。
有没有办法将“输入”时间设置为等于前一行的“输出时间”,即使我需要将当前选择嵌入到新选择中?
您将在下图中看到第一行的出时间是15:45:14
,下一行的入时间是15:46:14
。所以在这种情况下,一分钟是lost
实际上,如果车辆离开了一个点,它会立即在通往下一个点的路上,所以我可以将时间设置为与前一行的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
time 中的第一行可以保持原样,outtime 的最后一行可以保持不变。我只需要考虑最小时间和最大时间之间的每一秒。
一如既往地感谢任何帮助。
提前致谢