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
答案 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
列(或TIMESTAMP
或DATETIME
)并根据需要使用日期函数将其分开。
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)
的两端将有一个月的月份。如果无法更好地了解数据的来源和时间,我将无法为您解决问题。如果已经在一个月的第一天存储了一个读数,那么就没问题了。如果是每天或每小时,那么我的观点就成立了。