Найти пересечения дат

jacuba

Здравствуйте, есть 2 таблицы:Первая:Дата начала события, продолжительность событияВторая:ПериодПервая:2012-05-04 03:05:10 | 1202012-05-04 03:06:10 | 1602012-05-04 03:07:10 | 302012-05-04 03:07:11 | 102012-05-04 03:07:11 | 12012-05-04 03:08:19 | 402012-05-04 03:09:20 | 36Вторая:2012-05-04 03:05:102012-05-04 03:05:202012-05-04 03:05:302012-05-04 03:05:402012-05-04 03:05:502012-05-04 03:06:002012-05-04 03:06:10То есть во второй таблице значения типа datetime разбитые по 10секСтоит задача определить сколько одновременно событий из первой таблицы было произведено в десятисекундный промежуток из второй таблицы. Пожалуйста, помогите.
4 ответа

jacuba

преобразовать в запросе обе таблицы к виду "Начало" "Кончало", соединить таблицы по условию пересечения интервалов, после чего сгруппировать по интервалам из второй таблицы


jacuba

Поясните, пожалуйста "преобразовать в запросе обе таблицы к виду "Начало" "Кончало""Подразумевается, что должна появиться временная таблица? Если нет, то приведите пример подобного преобразования.


jacuba

не временная, а "встроенная", в виде подзапроса вложенного. Примерно так:
select *
 from (select <исходная дата> as b_date, <исходная дата + длительность> as e_date from `первая`) t1
 join (select <исходное время> as b_date, <исходное время + 9 сек> as e_date from `вторая`) t2
 on ...
и т.д. и т.п.


jacuba

Подразумевается, что должна появиться временная таблица? Если нет, то приведите пример подобного преобразования.
Да. Вам в фак по переменным(нумерация строк, потом джойн по номер=номер+1)Хотя если все интервалы гарантированно именно по 10 минут, то можно поступить проще:
from t1 join t2 on 
 t1.ts>=t2.ts and t1.ts<(t2.ts+interval 10 minute)