我有一个事件预定时间表和事件发生的实际时间表,例如:
Table A
ID Date Scheduled
1 2014-09-01 07:05:00
2 2014-09-02 07:05:00
3 2014-09-03 08:05:00
4 2014-09-04 07:10:00
Table B
ID Date Actual
1 2014-09-01 07:10:00
2 2014-09-02 07:16:00
3 2014-09-03 08:00:00
4 2014-09-04 14:15:00
如果我们假设计划在10分钟内的任何事情都被认为是“准时”的话,有没有办法使用MySQL返回“准时性能”?在上面的数据集中,准时性能将为50%,因为其中两个事件发生在计划的10分钟内。
补充编辑:如果事件是早期的,那么也将按时考虑
答案 0 :(得分:1)
是。但是,我不明白为什么日期和时间在不同的栏目中。您只需将两个表连接在一起并执行一些条件逻辑:
select avg(case when a.date = b.date and a.actual <= a.scheduled + interval 10 minute then 1
when b.date < a.date then 1
else 0
end) as OnTimePerformance
from tablea a join
tableb b
on a.id = b.id;
这并不能处理事件安排在一天(比如说晚上11点55分)并且实际时间是第二天(凌晨12点01分)的情况。您的数据表明这不会发生。如果日期和时间在一列中,这种情况会更容易。
答案 1 :(得分:1)
这是另一种方法
select
round((on_time/tot)*100) as performance
from
(
select
count(*) as tot,
sum(
case when
timestampdiff(minute,concat(t1.Date,' ',t1.Scheduled),concat(t2.Date,' ',t2.Actual)) < 10
then 1
end
) as on_time
from tableA t1
join tableB t2 on t1.id = t2.id
)p;
<强> DEMO 强>