Сложный запрос к одной таблице - MySQL

Формулировка задачи:

Прошу дать ориентир по выбору решения составления нужного запроса. вообщем есть лог база работы целого комплекса камер. так вот камера когда отваливается от сети в лог базу вноситься запись: камера name, его id, datetime, и признак detach. соответственно когда связь восстанавливается с камерой вноситься в эту же базу запись: камера name, его id, datetime, и признак atach. вот лог база
"215";"Локомотив3:Назад";"ATTACH";"2017-06-30 12:41:50.858";"2017-06-30 12:41:59.671";"S-CHOP5"
"213";"Локомотив3:Правый борт";"ATTACH";"2017-06-30 12:41:49.953";"2017-06-30 12:41:59.618";"S-CHOP5"
"213";"Локомотив3:Правый борт";"DETACH";"2017-06-30 12:41:44.228";"2017-06-30 12:41:53.962";"S-CHOP5"
"35";"Периметр:Автостоянка:КПП1_2";"ATTACH";"2017-06-30 12:41:43.861";"2017-06-30 12:41:43.978";"S-CHOP2"
"174";"Территория:СМС УБ:Выезд";"ATTACH";"2017-06-30 12:41:43.671";"2017-06-30 12:41:43.912";"S-CHOP4"
"215";"Локомотив3:Назад";"DETACH";"2017-06-30 12:41:43.214";"2017-06-30 12:41:51.851";"S-CHOP5"
"35";"Периметр:Автостоянка:КПП1_2";"DETACH";"2017-06-30 12:41:42.82";"2017-06-30 12:41:42.835";"S-CHOP2"
"174";"Территория:СМС УБ:Выезд";"DETACH";"2017-06-30 12:41:38.092";"2017-06-30 12:41:38.224";"S-CHOP4"
необходимо сделать выборку камер у которых время между разрывам и соединением более 5 минут.

Код к задаче: «Сложный запрос к одной таблице - MySQL»

textual
SELECT d.CamId, d.Moment, MIN(a.Moment)
FROM
  log d
  LEFT JOIN log a ON d.CamId = a.CamId AND a.Moment > d.Moment 
WHERE
  d.action = 'DETACH'
GROUP BY 
  d.CamId, d.Moment
HAVING 
  MIN(a.Moment) IS NULL
  OR
  DATEDIF(min,  d.Moment, MIN(a.Moment)) > 5

13   голосов, оценка 4.308 из 5


СОХРАНИТЬ ССЫЛКУ