2016-01-10 71 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