我有一张桌子" 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中是新手,并且太过新手来单独回答。
有什么想法吗?
答案 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;
您可以将其用作子查询,以获得超出范围的差距。