Выборка двух максимумов из двух разных месяцев MySql
Помогите доделать запрос. Есть два отдельно работающих запроса:
Максимальное число за прошлый месяц:
SELECT `maindata`
FROM `counterdata`
WHERE
`idapart`=1 AND `idcounterosbb`=4
AND `datarec` > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 2 MONTH
AND `datarec` < DATE_ADD(LAST_DAY(CURDATE()) - INTERVAL 1 MONTH, INTERVAL 1 DAY)
ORDER BY `maindata` DESC
LIMIT 1
И максимальное число за текущий месяц
SELECT a.`maindata`
FROM `counterdata` a
WHERE
a.`idapart`=1 AND a.`idcounterosbb`=4
AND a.`datarec` > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
AND a.`datarec` < DATE_ADD(LAST_DAY(CURDATE()) - INTERVAL 0 MONTH, INTERVAL 1 DAY)
ORDER BY a.`maindata` DESC
LIMIT 1
А как их объединить в одном запросе и получить разницу? Через UNION просто получаем два числа, а желательно поставить их в одну строку, и вычислить разницу.
Вот так попробовал:
SELECT a.`maindata` as maxdata, b.`maindata` as mindata
FROM `counterdata` a
LEFT JOIN
(
SELECT `maindata`
FROM `counterdata`
WHERE
`idapart`=1 AND `idcounterosbb`=4
AND `datarec` > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 2 MONTH
AND `datarec` < DATE_ADD(LAST_DAY(CURDATE()) - INTERVAL 1 MONTH, INTERVAL 1 DAY)
ORDER BY `maindata` DESC
LIMIT 1
) b ON NULL
WHERE
a.`idapart`=1 AND a.`idcounterosbb`=4
AND a.`datarec` > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
AND a.`datarec` < DATE_ADD(LAST_DAY(CURDATE()) - INTERVAL 0 MONTH, INTERVAL 1 DAY)
ORDER BY a.`maindata` DESC
LIMIT 1
Но не могу понять что правильно записать в строчку после ON при объединении.
Ответы (1 шт):
Автор решения: Менеджер Типографии
→ Ссылка
Решение:
SELECT a.`maindata` as maxdata, b.`maindata` as mindata, a.`maindata`-b.`maindata` as delta
FROM `counterdata` a
JOIN
(
SELECT `maindata`
FROM `counterdata`
WHERE
`idapart`=1 AND `idcounterosbb`=4
AND `datarec` > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 2 MONTH
AND `datarec` < DATE_ADD(LAST_DAY(CURDATE()) - INTERVAL 1 MONTH, INTERVAL 1 DAY)
ORDER BY `maindata` DESC
LIMIT 1
) b
WHERE
a.`idapart`=1 AND a.`idcounterosbb`=4
AND a.`datarec` > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
AND a.`datarec` < DATE_ADD(LAST_DAY(CURDATE()) - INTERVAL 0 MONTH, INTERVAL 1 DAY)
ORDER BY a.`maindata` DESC
LIMIT 1