MySQL объединяет две таблицы на основе временного поля, возвращающего наибольшее предыдущее время - PullRequest
1 голос
/ 03 июня 2011

У меня есть две таблицы примерно так:

EventTable (EID, Name, EventTime)
VideoTable (VID, StartTime, Video, DurationSecs)

EventTable содержит события, которые происходят в определенное время.VideoTable содержит список видеофайлов и время их запуска.

Я хотел бы вернуть список всех событий и правильный видеофайл (и, надеюсь, время в видеофайле) для каждого события.

Рассмотрим следующие данные:

EventTable
1, EV1, 2010-01-01 12:00:00
2, EV2, 2010-01-01 12:15:00
3, EV3, 2010-01-01 12:30:00

VideoTable
1, 2010-01-01 11:30:00, A.mpg, 2700
2, 2010-01-01 12:15:00, B.mpg, 2700
3, 2010-01-01 13:00:00, C.mpg, 1800

Список возврата будет выглядеть следующим образом:

EV1, A.mpg, 1800 (secs)
EV2, B.mpg, 0 (secs)
EV3, B.mpg, 900 (secs)

Как я могу добиться этого?

РЕДАКТИРОВАТЬ

Столбцы времени являются типами DATETIME.Между EID и VID нет никакой связи.В столбце длительности указывается продолжительность видео в секундах.

Ответы [ 3 ]

2 голосов
/ 03 июня 2011
SELECT
  e.Name,
  v.Video,
  TO_SECONDS(v.StartTime) - TO_SECONDS(e.EventTime) AS SecsIntoVideo
FROM EventTable e
  LEFT JOIN VideoTable v
    ON e.EventTime BETWEEN v.StartTime AND v.starttime + INTERVAL (v.DurationSecs)
1 голос
/ 03 июня 2011

Это было бы очень просто, если бы у вас было 2 временных столбца в VideoTable (для начала и конца).Так обычно решаются такие проблемы времени (ср. Снодграсс, Селко).Затем вы делаете что-то вроде:

SELECT e.name, v.vido, DATEDIFF(v.starttime, e.eventtime)
  FROM Event e, Video v
 WHERE e.eventtime BETWEEN v.startTime AND v.endTime

За исключением этого, вам придется делать некоторые другие махинации.Добавление времени окончания было бы довольно просто.

1 голос
/ 03 июня 2011

Предполагая, что столбцы времени события и начала имеют значение DATETIME (DATE также будет работать, но у вас есть время, объявленное в примере):

SELECT e.name, v.video,
       ABS(TO_SECONDS(v.starttime) - TO_SECONDS(e.eventtime))
  FROM EVENT e
  JOIN VIDEO v ON v.vid = e.eid

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...