这是我的表结构
###Table ###Expected Outpoot
ID | create_date Month | Application | Year
------------------------------ --------------------------
1 | 2017-06-25 10:00:11 10 | 0 | 2016
2 | 2017-06-26 10:00:11 11 | 0 | 2016
3 | 2017-07-02 10:00:11 12 | 0 | 2016
4 | 2017-07-25 10:00:11 1 | 0 | 2017
5 | 2017-08-21 10:00:11 2 | 0 | 2017
6 | 2017-08-22 10:00:11 3 | 0 | 2017
7 | 2017-08-25 10:00:11 4 | 0 | 2017
5 | 0 | 2017
6 | 2 | 2017
7 | 2 | 2017
8 | 3 | 2017
9 | 0 | 2017
我正在尝试从我的表中获取每月数据。我想在3个月前开始计算表格。
select date_format(tn.create_date,'%Y-%m') as mon,
count(*) as num
FROM table_name as tn
GROUP BY mon order by mon;
Month | Application
--------------------------------
2017-06 | 2
2017-07 | 2
2017-08 | 3
那么,我如何获得预期的输出?
以下是Query Fiddle
答案 0 :(得分:2)
您需要一个月份列表才能加入您的查询。您可以为@JohnHC建议制作表格,或使用this hack列出这样的月份:
set @start='2017-06-01';
select YEAR(date), MONTH(date), COUNT(create_date) from
(
select adddate(@start, INTERVAL @num:=@num+1 MONTH) date
from test, (select @num:=-9) num
limit 12
) as dt
LEFT JOIN test ON MONTH(create_date) = MONTH (date) and YEAR(create_date) = YEAR(date)
GROUP BY date;
请注意,在dt
查询中,不会访问test
表中的实际数据,但需要包含至少12行才能工作。此外,您不需要使用相同的表来生成用于查询create_date
的月份序列。
您可以在@num:=-9
表达式中设置间隔的开头。 -9
在这种情况下意味着在@start日期之前9个月。您可以在LIMIT
子句中设置间隔的长度。