У меня есть две таблицы A и B. A имеет id, startDate, endDate
. B имеет id, date, count
. Цель состоит в том, чтобы получить максимальное число между startDate
и endDate
для каждой записи в A
.
select a.id, a.startDate, a.endDate, max(b.count)
from A a join B b
on a.id=b.id
and b.date>=a.startDate
and b.date<=a.endDate
group By a.id, a.startDate, a.endDate;
, например
A -> (1,2016-01-01,2016-01-03)
B -> (1,2016-01-01,1), (1,2016-01-02,4), (1,2016-01-03,3), (1,2016- 01-04,2)
Результат запроса -> (1,2016-01-01,2016-01-03,4) Здесь 4 - максимум (1,4,3)
У меня есть индексы на id, startDate, endDate
для таблицы A
и id, date
для таблицы B
. Число строк в A
составляет около 10 КБ, а в B
- 2 миллиона. Вышеприведенный запрос занимает около 5-6 с. Кто-нибудь может предложить что-нибудь, что я мог бы попробовать?