MySQL query to get last 12 month sales where month and year are different fields

时间:2018-07-03 17:23:11

标签: mysql performance

I want to display last 12 months sales in a chart. SQL table has year and month field and not a combined date field. Im not able to give the interval condition of 12months on Year field.

SELECT s_month,s_year,SUM(s_amount) FROM table 
WHERE s_month >= Date_add(now(),interval - 12 month) 
AND s_year >= Date_add(now(),interval - 12 month)
GROUP BY s_year,s_month

2 个答案:

答案 0 :(得分:1)

一种方法是:

select s_year, s_Month, sum(s_amount)
from t
where date(concat_ws('-', s_year, s.month, 1)) >= curdate() - interval 12 month
group by s_year, s_month;

您可能要调整日期算术,具体取决于您是否要获取12个月前的日期。

如果您想要数据中的最后12个月,可以执行以下操作:

select s_year, s_month, sum(amount)
from t
group by s_year, s_month
order by s_year desc, s_month desc
limit 12;

答案 1 :(得分:0)

这是一个强有力的论据,反对将日期部分(月,年)存储在单独的列中。

您拥有的WHERE子句没有达到您的期望

最好有一个DATE列(或TIMESTAMPDATETIME)并根据需要使用日期函数将其分开。

SELECT  MONTH(dat), YEAR(dat), SUM(amount)
    FROM  table
    WHERE  dat >= CURDATE() - INTERVAL 12 MONTH
    GROUP BY  LEFT(dat, 7) -- eg, "2017-12"

您的查询还有另一个问题。 SUM(amount)的两端将有一个月的月份。如果无法更好地了解数据的来源和时间,我将无法为您解决问题。如果已经在一个月的第一天存储了一个读数,那么就没问题了。如果是每天或每小时,那么我的观点就成立了。