У нас есть таблица вроде этого:Как я могу обнаружить последовательные часы в столбце MySQL DATETIME?
DESCRIBE time_slots; id int(11) user_id int(11) start_time datetime
Поле start_time
всегда час приращение (например 2013-09-04 16:00:00
)
Наш ученый данных хочет запросить эту таблицу таким образом, что идентифицирует последовательные start_time
записей в user_id
такие, что она может создать производную таблицу, которая выглядит следующим образом:
id int(11) user_id int(11) start_time datetime end_time datetime
Например, учитывая эти данные:
user_id: 5, start_time: 2013-09-04 16:00:00 user_id: 5, start_time: 2013-09-04 17:00:00 user_id: 5, start_time: 2013-09-04 18:00:00 user_id: 6, start_time: 2013-09-04 16:00:00 user_id: 6, start_time: 2013-09-04 17:00:00 user_id: 6, start_time: 2013-09-04 18:00:00 user_id: 6, start_time: 2013-09-04 20:00:00 user_id: 6, start_time: 2013-09-04 21:00:00 user_id: 6, start_time: 2013-09-04 22:00:00
... мы могли бы получить этот выход:
user_id: 5, start_time: 2013-09-04 16:00:00, end_time: 2013-09-04 18:00:00 user_id: 6, start_time: 2013-09-04 16:00:00, end_time: 2013-09-04 18:00:00 user_id: 6, start_time: 2013-09-04 20:00:00, end_time: 2013-09-04 22:00:00
Там может быть кратны этих Начало/конец «блоки» для данного пользователя в день (но они не будут пересекаться).
Любые идеи о том, как это можно сделать в SQL, прежде чем я перейду в План B (настройте денормализованный хранилище данных)?
Функции окон в MySQL не существуют. –
Выполнение самостоятельного соединения с использованием RANK и RANK-1 или user_id, время запуска - 1 час в качестве ключей даст вам ту же способность – mhoglan
btw, InfiniDB, которая является базой данных, совместимой с MySQL (с открытым исходным кодом GPLv2), имеет функции оконного построения, встроенные ontop стандарта MySQL функции. – mhoglan