2016-01-10 74 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:4613:17:31以秒为单位,那么自此之后所有记录到13:23:46的值是0它应该忽略该时间并继续。那么从13:23:46再次有portNo1值它应该采取差异13:23:4613:23:31并将其添加到以前的差异。如果在mysql中有任何简单的方法,请告诉我,我在Perl中尝试了很多,但没有得到正确的值。

回答

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