找出mysql Time的空白

时间:2015-02-08 14:21:19

标签: mysql

我有一张桌子" channel_001"时间戳列时间,我确实把它分开了10分钟。

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 个答案:

答案 0 :(得分:0)

你可以找到没有" next"的行。时间与:

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;

您可以将其用作子查询,以获得超出范围的差距。