@Leytenant

Как запросом MySQL получить максимальный промежуток по времени между записями в таблице?

Есть таблица лога событий:
id | datetime

Нужно одним вопросом получить время начала и окончания самого продолжительного промежутка между записями?
  • Вопрос задан
  • 244 просмотра
Пригласить эксперта
Ответы на вопрос 2
lidacriss
@lidacriss
wtf
Если у вас все ID идут подряд, т.е. 1,2,3,4,5,6,7 и тд, то это не очень сложно сделать
SELECT 
	t1.id AS 'ID',
	CONCAT(t1.id,'-',t2.id) AS 'id разница',
	ABS(TIMESTAMPDIFF(MINUTE,t1.datetime,t2.datetime)) AS 'разница минут'
FROM TABLE_NAME AS t1
JOIN TABLE_NAME AS t2 on t1.id=t2.id+1 
ORDER BY 3 DESC
LIMIT 1

а вот если у вас между записями есть "пробелы", т.е ID записей будут типа 2, 4, 7, 11, 12, 13, 15, 33 ну и тд, то будет несколько проблематичнее :)
получается (по крайней мере, у меня) очень тяжелый запрос
может, у кого-то здесь найдутся еще мысли по этому поводу или я отпишусь позже
Ответ написан
LaRN
@LaRN
Senior Developer
Если нигде не накосячил, то как-то так. Правда не уверен в эффективности такого запросы если таблицы будут очень большими. Смысл такой: для каждого id находим минимальное по времени расстояние до следующего id и находим максимальное из этих расстояний.
SELECT
t1.id AS 'ID',
CONCAT(t1.id,'-',t2.id) AS 'id разница',
MIN(ABS(TIMESTAMPDIFF(MINUTE,t1.datetime,t2.datetime))) AS 'разница минут'
FROM TABLE_NAME AS t1
JOIN TABLE_NAME AS t2 on t2.datetime > t1.datetime
GROUP BY t1.ID, t2.ID
ORDER BY 3 DESC
LIMIT 1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы