计算预定时间和实际时间之间的“准时性能”

时间:2014-09-24 11:32:45

标签: mysql time

我有一个事件预定时间表和事件发生的实际时间表,例如:

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分钟内。

补充编辑:如果事件是早期的,那么也将按时考虑

2 个答案:

答案 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