获得12个月的应用程序计数形式SQL并开始计算前3个月的计数

时间:2017-09-05 08:48:26

标签: php mysql sql

这是我的表结构

        ###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

1 个答案:

答案 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子句中设置间隔的长度。

Example fiddle.