2016-01-10 2 views
0

Я одна таблица, структура которого подобна следующимMysql добавить время на основе условий

+---------------------+---------+ 
| date_time   | portNo1 | 
+---------------------+---------+ 
| 2016-01-08 13:15:46 |  1 | 
| 2016-01-08 13:16:01 |  2 | 
| 2016-01-08 13:16:16 |  1 | 
| 2016-01-08 13:16:31 |  2 | 
| 2016-01-08 13:16:46 |  1 | 
| 2016-01-08 13:17:00 |  2 | 
| 2016-01-08 13:17:16 |  1 | 
| 2016-01-08 13:17:31 |  1 | 
| 2016-01-08 13:17:46 |  0 | 
| 2016-01-08 13:18:01 |  0 | 
| 2016-01-08 13:18:16 |  0 | 
| 2016-01-08 13:18:31 |  0 | 
| 2016-01-08 13:18:41 |  0 | 
| 2016-01-08 13:19:01 |  0 | 
| 2016-01-08 13:19:16 |  0 | 
| 2016-01-08 13:19:27 |  0 | 
| 2016-01-08 13:19:41 |  0 | 
| 2016-01-08 13:19:56 |  0 | 
| 2016-01-08 13:20:11 |  0 | 
| 2016-01-08 13:20:26 |  0 | 
| 2016-01-08 13:20:41 |  0 | 
| 2016-01-08 13:20:56 |  0 | 
| 2016-01-08 13:21:16 |  0 | 
| 2016-01-08 13:21:31 |  0 | 
| 2016-01-08 13:21:43 |  0 | 
| 2016-01-08 13:22:01 |  0 | 
| 2016-01-08 13:22:16 |  0 | 
| 2016-01-08 13:22:31 |  0 | 
| 2016-01-08 13:22:46 |  0 | 
| 2016-01-08 13:23:01 |  0 | 
| 2016-01-08 13:23:12 |  0 | 
| 2016-01-08 13:23:31 |  0 | 
| 2016-01-08 13:23:46 |  2 | 
| 2016-01-08 13:24:01 |  2 | 
| 2016-01-08 13:24:16 |  2 | 
| 2016-01-08 13:24:31 |  1 | 
| 2016-01-08 13:24:46 |  2 | 
| 2016-01-08 13:25:00 |  2 | 

Теперь то, что я должен сделать, это только добавить время которого portNo1 значение не 0 , что означает, что он должен добавить время от 13:15:46 до 13:17:31 в секундах, после чего после этого все записи до 13:23:46 значение равно 0, оно должно игнорировать это время и продолжить. то снова от 13:23:46 имеет значение portNo1 значение должно быть разным между 13:23:46 и 13:23:31 и добавить его к предыдущей разнице. Ребята Я пробовал много в perl, но не получаю правильных значений, если есть какой-либо простой способ в mysql, пожалуйста, скажите мне.

ответ

1

, если я не понимание вопроса все не так, вы можете сделать что-то вроде:

SELECT SUM(UNIX_TIMESTAMP(date_time)-UNIX_TIMESTAMP(prevtime)) 
FROM (
    SELECT date_time, portNo1, @prevTime as prevtime, 
    @prevTime := date_time 
    FROM MyTable 
) t1 
WHERE (portNo1 > 0 AND prevtime IS NOT null) 

Это просуммировать время различие (в секундах) между текущей строкой и предыдущей строкой, если portNo1 в текущая строка больше 0. Это то, что вы хотите?

Я сделал скрипку здесь: http://sqlfiddle.com/#!9/b6dfa/3

+0

да, вот что я хотел – eLemEnt

+0

он говорит Неизвестный столбец «время» в «списке поля» – eLemEnt

+0

Используйте ваши имена столбцов во внутреннем запросе – Jcl