2015-02-08 83 views
0

我有一個帶有時間戳列Time的表「channel_001」,並且我將它分隔了10分鐘。在mysql中查找空白時間

2013-01-01;00:10:04; 
2013-01-01;00:20:00; 
2013-01-01;00:30:02; 
2013-01-01;00:40:04; 

但是缺少數據。我如何檢測缺少的行?然後在那裏插入一行?!

例如:

2013-01-01;00:10:04; 
2013-01-01;00:20:00; 
2013-01-01;00:30:02 
2013-01-01;00:40:04; 
2013-01-01;01:00:02; 

那麼這將是丟失:

2013-01-01;00:50:00; 

我想用表連接到自己的了,但是我在SQL新和太多的新手來單獨回答答案。

任何想法?

+1

爲什麼缺少行?那分號是什麼? – Strawberry 2015-02-08 14:23:05

+0

分號格式:分號文本。這些數據是個人應用程序消耗的有效功耗。有時候:當沒有人在家時 - >沒有數據被盜取。或者這是一個錯誤。 – Hase 2015-02-08 16:50:57

+0

但是,爲什麼你需要先檢查? – Strawberry 2015-02-08 17:42:29

回答

0

可以發現,沒有「下一個」時間像行:

select c.* 
from channel_001 c 
where not exists (select 1 
        from channel_001 c2 
        where c2.timestamp > c.timestamp + interval 9 minute and 
         c2.timestamp < c.timestamp + interval 11 minute 
       ); 

如果你的表是大(行幾萬),你可能會想使用的變量。以下代碼獲取上一個時間戳:

select c.*, 
     (case when (@tmp := @prevts) is null then null 
      when (@prevts := timestamp) is null then null 
      else @tmp 
     end) as prev_timestamp 
from channel_001 c cross join 
    (select @prevts := 0, @tmp := 0) vars 
order by timestamp; 

您可以將此作爲子查詢來獲取超出範圍的間隔。

+0

爲了將數據分隔10分鐘,我確實寫了:選擇DATE(time)作爲Date,DATE_FORMAT(time,'%T')作爲Time,avg(verbrauch)作爲Watt from channel_007 where MONTH(time)='01' (時間)=「2014」組(時間)((60/10)*小時(時間)+平板(分鐘(時間)/ 10)),MONTH(時間),DAY(時間)我如何加入這兩個查詢?謝謝 – Hase 2015-02-08 16:59:46