Следующее утверждение удивительно работает, но я не уверен, что объединение в одну таблицу 3 раза будет эффективным.Мне пришлось отключить ONLY_FULL_GROUP_BY
, чтобы он заработал.
В игре 2 стола.Одна - это главная таблица с информацией о Дистрибьюторе, вторая - это таблица покупок, которая содержит amount
, date
и id
соответствующего Дистрибьютора в основной таблице (ассоциация).
Там3 вещи, которые мне нужны.Продажи за год, в которых СУММА сумма продаж определенного Дистрибьютора за текущий год.Продажи в прошлом году, которые делают то же самое для предыдущего года.Затем, наконец, просто получите самую последнюю дату и сумму покупки.
Пользователь должен иметь возможность фильтровать по этим значениям (lys
, ytd
и т. Д.), Поэтому объединение их в качестве переменных выглядит какпутьРазмер БД составляет около 7000 записей.
SELECT
d.*,
ytd_total,
lys_total,
last_amount,
last_purchase
FROM Distributor as d
LEFT JOIN (
SELECT
assoc, SUM(amount) ytd_total
FROM purchases
WHERE db = 1 AND purchase_date >= '{$year}-01-01'
GROUP BY assoc
) AS ytd
ON ytd.assoc = d.id
LEFT JOIN (
SELECT
assoc, SUM(amount) lys_total
FROM purchases
WHERE db = 1 AND purchase_date BETWEEN '{$lyear}-01-01' AND '{$lyear}-12-31'
GROUP BY assoc
) AS lys
ON lys.assoc = d.id
LEFT JOIN (
SELECT
assoc, amount last_amount, purchase_date last_purchase
FROM purchases
WHERE db = 1
GROUP BY assoc
) AS lst
ON lst.assoc = d.id
WHERE ........