Мне нужно получить общую сумму отметки за предыдущие 3 месяца. то есть, если я посмотрю в апреле, я получу сумму Jan, Feb, Mar. Аналогично, когда я смотрю на Jan, это отображает общее количество предыдущего года Oct, Nov, Dec. Я использую следующий запрос
SELECT empid,
name,
sum(total) AS total
FROM formresult
WHERE (MONTH(date) = MONTH(now())
OR MONTH(date) = MONTH(now()- INTERVAL 1 MONTH)
OR MONTH(date) = MONTH(now()- INTERVAL 2 MONTH))
AND YEAR(date) = YEAR(now())
GROUP BY empid
Но при использовании этого кода я получил 3-месячный результат, но когда я смотрю на Jan, он не отображает результат предыдущего года. Как это возможно. Помогите мне, пожалуйста
Что-то вроде следующего должно делать то, что вам нужно.
SELECT empid, name, SUM(total) AS total
FROM formresult
WHERE date BETWEEN
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m-01') AND
LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
GROUP BY empid
Для DATE_FORMAT()
дополнительной информации см. DATE_FORMAT()
, DATE_SUB()
и LAST_DAY()
.
Таким образом, есть несколько проблем с математикой даты, которую здесь делают. Сначала похоже, что вы получаете текущий месяц и предыдущие два месяца вместо предыдущих трех месяцев. Это дает вам текущий месяц MONTH(date) = MONTH(now())
. Также вы не можете считать это в текущем году, если вы запустите это в январе, вы ожидаете получить октябрь, ноябрь и декабрь предыдущего года, однако он вернется в текущем году.