2012-03-15 33 views
1

我有一个表计数时间差异基于状态

ID | Date  | Time  | Status 
73937 | 3/1/2012 | 17:25:00 | Pending  |  
73938 | 3/1/2012 | 17:27:00 | Pending  | time diff 2 min 
73948 | 3/1/2012 | 17:29:00 | Pending  | time diff 2 min 
73952 | 3/1/2012 | 17:45:00 | Stop Clock  | time diff 16 min 
74967 | 3/1/2012 | 19:15:00 | Stop Clock  | time diff 0 min 
74970 | 3/1/2012 | 20:15:00 | Pending Active | time diff 60 min 
74972 | 3/1/2012 | 20:21:00 | Active   | time diff 6 min 

如何计算时间差异,其中状态不是Stop Clock和总结在MySQL中的时间差异?
你可以看到状态是否为Stop Clock将停止计数(0分钟)。

+1

你将需要更好地解释你想要的东西。显示您希望看到的输入数据的输出。另外,你到目前为止尝试过什么? – 2012-03-15 04:15:04

+0

Field Time的数据类型是什么? – 2012-03-15 04:41:19

+0

如果您决定使用MySQL自带的'DATETIME'字段类型,这将是一项非常简单的任务。 – kba 2012-03-15 05:15:17

回答

1

这个查询:

select id, date, time, status, hour(diff) * 60 + minute(diff) Diff from (
    select id, date, 
    if(@active or status != 'StopClock', 
     timediff(addtime(date, time), @prevTime), 0) Diff, 
    time(@prevTime := addtime(date, time)) time, 
    @active := status != 'StopClock', 
    status 
    from t, (select @prevTime := 0, @active := false) init 
    order by id 
) final 

会导致:

+-------+------------+----------+---------------+------+ 
| ID | DATE | TIME | STATUS  | DIFF | 
+-------+------------+----------+---------------+------+ 
| 73937 | 2012-03-01 | 17:25:00 | Pending  |  | 
| 73938 | 2012-03-01 | 17:27:00 | Pending  | 2 | 
| 73948 | 2012-03-01 | 17:29:00 | Pending  | 2 | 
| 73952 | 2012-03-01 | 17:45:00 | StopClock  | 16 | 
| 74967 | 2012-03-01 | 19:15:00 | StopClock  | 0 | 
| 74970 | 2012-03-01 | 20:15:00 | PendingActive | 60 | 
| 74972 | 2012-03-01 | 20:21:00 | Active  | 6 | 
+-------+------------+----------+---------------+------+ 

需要注意的是,由于某种原因,你不采取秒钟考虑。如果您有任何问题,请告诉我。

+0

嗨,你最好....你很好!我已经尝试了你的代码,并且正是我期望的!谢谢! – 2012-03-16 12:08:30

+0

欢迎!你应该接受答案,然后:)看到你身边! – 2012-03-16 12:47:00

+0

@Mosty ...我需要总结'DIFF'列:( – 2012-03-19 07:53:55