Php 从SQL获取12个月的申请计数表,并从前3个月开始计数

Php 从SQL获取12个月的申请计数表,并从前3个月开始计数,php,mysql,sql,Php,Mysql,Sql,这是我的桌子结构 ###Table ###Expected Outpoot ID | create_date Month | Application | Year ------------------------------ -------------------------- 1 | 2017-06-25 10:00:11 10 |

这是我的桌子结构

        ###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
我正在尝试从我的表中获取每月数据计数。我想从前三个月开始盘点

这就是我到目前为止尝试过的? 编辑:我马上就要解决这个问题了。这是查询和结果。 那么,如何获得预期的输出呢


以下是您需要加入查询的月份列表。您可以按照@JohnHC的建议为其制作一个表格,或使用以下方式列出月份:

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\u date
相同的表来生成月序列

您可以在
@num:=-9
表达式中设置间隔的开始<代码>-9在这种情况下,表示@start date之前的9个月。您可以在
LIMIT
子句中设置间隔的长度


这是一项很好的工作,但请注意,您需要一个数字表,并且需要修复
分组依据(不要在分组依据中使用别名)@草莓先生,如果您能提供帮助,我已经编辑了问题并添加了sql FIDLE。@JohnHC先生,我已经编辑了问题并添加了sql FIDLE,如果您能提供帮助。为什么开始时需要12行sir在表中可能没有可用的行。然后它将显示所有零。这是因为从测试中加入
,(选择@num:=-1)num
(选择@num:=-1)num
部分是单个值。这将生成笛卡尔积,因此需要表中的12+行。不需要使用此表。您可以创建一个包含12个空列的全新表格,因为表格中的数据未被使用。对不起,先生,我错误地在我的预期结果中添加了下一个12个月,实际上我想要上一个12个月。那该怎么办呢。先生,我已经更新了我的问题。我编辑了我的答案,添加了一个关于如何操作月份序列的解释。我在问题中添加了我的查询小提琴,我在其中添加了我最近尝试过的查询。
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;