Я вроде как новенький здесь в stackoverflow. В любом случае, вот моя проблема, надеюсь, кто-нибудь может мне помочь в этом.
У меня есть таблица в MySQL см. Ниже
Start Time End Time Date
9:00 10:00 2016-02-26
9:00 10:00 2016-02-25
11:00 12:00 2016-02-25
12:00 13:00 2016-02-25
13:00 14:00 2016-02-25
15:00 16:00 2016-02-25
что я хочу получить, это разрыв между тем временем с конкретной датой. Смотрите ниже мой желаемый результат:
Start Time End Time Date
10:00 11:00 2016-02-25
14:00 15:00 2016-02-25
Пожалуйста, если кто-то знает ответ, это будет большая помощь. Спасибо
Вы можете использовать следующий запрос:
SELECT gap_start, gap_end
FROM (
SELECT (SELECT EndTime
FROM mytable AS t2
WHERE t2.EndTime < t1.StartTime
ORDER BY t2.EndTime DESC LIMIT 1) AS gap_start,
StartTime AS gap_end
FROM mytable AS t1) AS t
WHERE gap_start IS NOT NULL
Используемый коррелированный подзапрос получит StartTime
из записей, которые непосредственно предшествуют текущей записи. Здесь предполагается, что есть всегда разрыв между последовательными записями.
Редактировать:
Запрос может быть изменен следующим образом, чтобы обработать добавление Date
поле:
SELECT gap_start, gap_end, `Date`
FROM (
SELECT (SELECT EndTime
FROM mytable AS t2
WHERE t2.`Date` <= t1.`Date` AND t2.EndTime <= t1.StartTime
ORDER BY t2.`Date` DESC, t2.EndTime DESC LIMIT 1) AS gap_start,
StartTime AS gap_end,
`Date`
FROM mytable AS t1) AS t
WHERE gap_start IS NOT NULL AND gap_start < gap_end
Других решений пока нет …