Этот запрос:
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 |
+-------+------------+----------+---------------+------+
Обратите внимание, что по какой-то причине вы не учитываете секунды.Дайте мне знать, если у вас есть какие-либо проблемы с этим.