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;