gpt4 book ai didi

mysql - 将单元格的值设置为等于另一行中单元格的值

转载 作者:行者123 更新时间:2023-11-29 00:33:08 25 4
gpt4 key购买 nike

我有一个 MySQL 查询,它为我的车辆跟踪“进出”时间生成一个表。

问题是“入场”时间与“出场”时间不同,因此中间会损失几秒或几分钟。

有没有办法将上一行的“进入”时间设置为等于“离开时间”,即使我需要将当前选择嵌入到新选择中?

您将在下图中看到第一行输出时间是 15:45:14,下一行的输入时间是 15:46:14 .所以在这种情况下,一分钟是 lost

实际上,如果车辆离开了一个点,它会立即在通往下一个点的路上,所以我可以将 in 时间设置为等于 out 的时间前一行。这样,时间就永远不会丢失

enter image description here

我查询的 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 的最后几行可以保持原样。我只需要考虑最小时间和最大时间之间的每一秒。

一如既往地感谢您的帮助。

提前致谢

最佳答案

我认为这将为您提供每个当前超时之前的最新时间,以供您现有记录:

select
vt.vehicle, max(qGetMaxOut.outtime) as intime , vt.outtime

from
vehicle_times vt

inner join
(
select vehicle, outtime
from vehicle_times

) qGetMaxOut
on qGetMaxOut.vehicle = vt.vehicle
and qGetMaxOut.outtime <= vt.intime

group by
vt.vehicle, vt.outtime

如果您想插入 一条新记录,但需要找到特定时间的前一个时间(即,如果您需要插入一条新记录,谁是输入/输出时间早于 最新 时间 - 例如,插入一条以前不知何故遗漏的记录,并在其中添加了较新的时间条目)。如果您需要这种情况,请告诉我,如果您不能从上面解决问题,我会详细说明。

连接基本上“返回自身”连接表以提供另一个“副本”,但将“副本”中的结果限制为仅主表中当前车辆的那些行,并从副本中排除这些行其中车辆的下车时间比主表中的当前上车时间更新。通过这种方式,您可以对副本执行 MAX(),以查找之前的输出时间。

我不知道您的具体要求,但我建议您存储尽可能准确的信息。因此,如果“sythensising”一个值只是为了装饰一些报告的目的,我会单独留下数据,整理报告,而不是丢失可能会派上用场的数据。例如,如果将来您突然需要告诉您的老板“我们的车辆‘闲置’了多长时间?”

但是,如果您只是想插入一条新记录,忽略实际超时时间,并替换为最近的输入时间 记录,然后下面的查询将为您找到该值:

select
vt.vehicle, max(vt.outtime) as intime

from
vehicle_times vt

group by
vt.vehicle

我错过了您的要求吗?

关于mysql - 将单元格的值设置为等于另一行中单元格的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15611011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com