Я пытаюсь найти пропуски во временных данных, но проблема в том, что мои данные не являются последовательностью с фиксированным интервалом, поэтому я не могу использовать это решение: Как найти пропуски в последовательной нумерации в mysql?
Мои временные данные представлены в миллисекундах (bigint), обычно в каждой секунду есть хотя бы одно значение, поэтому я думал что-то вроде:
SELECT *
FROM mytable AS t1
LEFT JOIN mytable AS t2 ON t2.time > t1.time AND (t2.time - t1.time) < 1000
WHERE t2.id IS NULL
ORDER BY t1.time ASC
LIMIT 100
Но этот запрос требует навсегда (моя таблица содержит более 100 миллионов записей).
Есть ли более быстрое решение? // MySQL версия 5.7.14
Я также нашел это: MySQL / MariaDB: как найти пропуски во временных данных? , но использует несколько подвыборов, которые, я думаю, будут четными медленнее
MCRE:
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`time` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `TIME` (`time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
INSERT INTO test (time) VALUES
(10), (30), (50), (60), (65), (100), (150), (200), (350), (1000), (2500), (2600), (2660), (2700), (2800), (3000), (3500), (5000), (5100), (5150);
http://sqlfiddle.com/#! 9 / a8f5a2 / 2/0