У меня есть две таблицы и вы хотите сделать соединение между ними и суммировать некоторые столбцы. Критерии присоединения должны состоять в том, чтобы таблица A находилась в пределах 1 и 5 минут времени таблицы B.
Таким образом B.time <= A.time <= B.time + (1 | 5) минут
Вот код, и у меня есть индексы (btree) для обоих столбцов datetime. Но, похоже, SUPER SLOW работает. Все, что я могу сделать по-другому?
SELECT
a.Name,
SUM(b.UnitsSold),
SUM(b.Revenue),
SUM(c.UnitsSold),
SUM(c.Revenue)
FROM cars a
INNER JOIN sales b
ON
b.Datet <= a.Datet
and a.Datet <= DATE_ADD(b.Datet, INTERVAL 1 MINUTE)
INNER JOIN sales c
ON
c.Datet <= a.Datet
and a.Datet <= DATE_ADD(c.Datet, INTERVAL 5 MINUTE)
GROUP BY
a.name
Как уже упоминалось ранее, без выборочных данных, желаемых результатов и объяснений логики того, что вам нужно, это трудно помочь, но вот потенциальное решение, которое вы могли бы попробовать:
Создайте два новых столбца в вашей таблице продаж (Datet_b и Datet_c) и вставке/обновлении, запустите функцию DATE_ADD, чтобы заполнить их.
Добавьте индексы для этих двух столбцов и затем выполните запрос выше без функции DATE_ADD.
Запустите запрос, и производительность должна быть немного лучше