我有如下要求:
我正在尝试将MS Access表宏循环转换为可用于配置单元表。名为trip_details
的表格包含有关卡车进行的特定行程的详细信息。叉车可以在多个位置停车,停车类型由称为type_of_trip
的标志指示。此列包含诸如arrival
,departure
,loading
等的值。
最终目的是计算每辆卡车的停留时间(卡车开始下一次旅行之前要花费多少时间)。要计算此值,我们必须逐行迭代表并检查行程类型。
一个典型的示例如下:
在文件结束时执行:
结束
解决蜂巢中此问题的最佳方法是什么?
我尝试检查配置单元是否包含用于循环的关键字,但找不到一个。我当时在考虑使用Shell脚本执行此操作,但需要有关如何实现此操作的指南。
我无法透露全部数据,但可以随时在评论部分提出任何问题。
输入
旅行ID 旅行类型 时间戳 位置
1 Departure 28/5/2019 15:00 Warehouse
1 Arrival 28/5/2019 16:00 Store
1 Live Unload 28/5/2019 16:30 Store
1 End Trip 28/5/2019 17:00 Store
预期产量
旅行ID 原始位置 目标位置 停留时间
1 Warehouse Store 2 hours
答案 0 :(得分:1)
您不需要为此循环,请使用SQL查询的功能。
将时间戳转换为秒(使用指定的格式'dd/MM/yyyy HH:mm'
),计算每个trip_id的最小值和最大值,并考虑类型,减去秒,将秒差转换为'HH:mm'
格式或{{3} }:
with trip_details as (--use your table instead of this subquery
select stack (4,
1,'Departure' ,'28/5/2019 15:00','Warehouse',
1,'Arrival' ,'28/5/2019 16:00','Store',
1,'Live Unload' ,'28/5/2019 16:30','Store',
1,'End Trip' ,'28/5/2019 17:00','Store'
) as (trip_id, type_of_trip, `timestamp`, location)
)
select trip_id, origin_location, destination_location,
from_unixtime(destination_time-origin_time,'HH:mm') dwell_time
from
(
select trip_id,
min(case when type_of_trip='Departure' then unix_timestamp(`timestamp`,'dd/MM/yyyy HH:mm') end) origin_time,
max(case when type_of_trip='End Trip' then unix_timestamp(`timestamp`,'dd/MM/yyyy HH:mm') end) destination_time,
max(case when type_of_trip='Departure' then location end) origin_location,
max(case when type_of_trip='End Trip' then location end) destination_location
from trip_details
group by trip_id
)s;
结果:
trip_id origin_location destination_location dwell_time
1 Warehouse Store 02:00