【发布时间】:2019-10-04 14:18:29
【问题描述】:
我正在尝试找出基于多个因素聚合 DB2 结果和分组的最佳方法。
目前我有这个查询:
SELECT
T1.VEHICLE,
T2.VEHICLE_ID,
T3.WORK_ORDER_ID,
T3.JOB_CREATION,
T5.JOB_STATUS,
T4.JOB_STATUS_TIME
FROM SCHEMA.VEHICLE T1
INNER JOIN SCHEMA.VEHICLE_TO_WORK_ORDER T2
ON T1.VEHICLE_ID = T2.VEHICLE_ID
INNER JOIN SCHEMA.WORK_ORDER T3
ON T2.WORK_ORDER_ID = T3.WORK_ORDER_ID
INNER JOIN SCHEMA.WORK_ORDER_TO_JOB_STATUS T4
ON T3.WORK_ORDER_ID = T4.WORK_ORDER_ID
INNER JOIN SCHEMA.JOB_STATUS T5
ON T4.JOB_STATUS_ID = T5.JOB_STATUS_ID;
它返回这些结果,从数据的角度来看是正确的:
VEHICLE VEHICLE_ID WORK_ORDER_ID JOB_CREATION JOB_STATUS JOB_STATUS_TIME
------------------------------------------------------------------------------------------------------------------
VEHICLE 6 6 12345 2019-09-25 00:00:09.426178 CREATED 2019-09-25 00:00:09.469059
VEHICLE 6 6 12345 2019-09-25 00:00:09.426178 ACTIVE 2019-09-25 13:40:00.981891
VEHICLE 6 6 12345 2019-09-25 00:00:09.426178 COMPLETED 2019-09-25 13:45:02.748800
VEHICLE 7 7 54321 2019-09-26 00:00:09.426178 CREATED 2019-09-26 00:00:09.469059
VEHICLE 7 7 54321 2019-09-26 00:00:09.426178 ACTIVE 2019-09-26 13:40:00.981891
VEHICLE 7 7 54321 2019-09-26 00:00:09.426178 PAUSED 2019-09-26 14:40:02.748800
VEHICLE 7 7 54321 2019-09-26 00:00:09.426178 ACTIVE 2019-09-26 14:45:09.469059
VEHICLE 7 7 54321 2019-09-26 00:00:09.426178 COMPLETED 2019-09-26 14:50:00.981891
VEHICLE 3 3 12346 2019-09-27 00:00:09.426178 OPEN 2019-09-27 13:40:02.748800
VEHICLE 3 3 12346 2019-09-27 00:00:09.426178 ACTIVE 2019-09-27 13:45:09.469059
VEHICLE 3 3 12346 2019-09-27 00:00:09.426178 PAUSED 2019-09-27 13:50:00.981891
VEHICLE 3 3 12346 2019-09-27 00:00:09.426178 CANCELLED 2019-09-27 13:51:02.748800
我在这里尝试做的是按车辆分组并在给定日期范围内获取该车辆的工作订单,然后总结活动时间或活动之间的时间,以便我可以实现总和列的聚合(此示例有 3 辆车,每辆车只有一个工作订单,但我希望能够查看某个日期范围内的任何工作订单并获得相同的汇总。)
我想获得每个创建的工作订单的计数,以及每个以完成或取消为自己的列而结束的订单,但我想要一个总活动时间,即 job_status_time(从每个活动到暂停的时间或活动到完成,因为一个任务可能是活动的然后暂停,然后再次活动,然后完成)
我希望得到与此类似的结果,但我只是不太知道如何正确汇总:
VEHICLE Created Completed Cancelled Total Active Time (minutes)
------------------------------------------------------------------
6 1 1 0 5
7 1 1 0 65
3 1 0 1 5
如何按车辆对这些结果进行分组,并且仍然可以根据 job_status 获得这些总和列和聚合时间
【问题讨论】: