繁体   English   中英

如何写这个查询MYSQL

[英]How to write this query MYSQL

我有这个数据库:

| id | name  | email           | control_number | created    |   |   |   |   |          |
|:--:|-------|-----------------|----------------|------------|---|---|---|---|---|
| 1  | john  | john@gmail.com  | 1              | 14/09/2016 |   |   |   |   |   |
| 2  | carl  | carl@gmail.com  | 1              | 13/08/2016 |   |   |   |   |   |
| 3  | frank | frank@gmail.com | 2              | 12/08/2016 |   |   |   |   |   |

我想通过control_number获取过去12个月中的COUNT。

基本上是一个COUNT,其中control_number = 1,但按月计。

因此,如果查询在今天(9月)完成,则应从9月开始到2015年10月,并显示每个月的记录数。

结果应为:

09/2016 = 50
08/2016 = 35
07/2016 = 20
06/2016 = 50
05/2016 = 21
04/2016 = 33
03/2016 = 60
02/2016 = 36
01/2016 = 11
12/2015 = 0
11/2015 = 0
10/2015 = 0

嗯。 获取0值可能很棘手。 假设您每个月都有一些数据(即使不是“ 1”),则可以执行以下操作:

select extract(year_month from created) as yyyymm,
       sum(control_number = 1)
from t
where created >= date_sub(curdate(), interval 12 month)
group by extract(year_month from created)
order by yyyymm;

如果您每个月都没有至少一条记录,那么您将需要一个left join和一个每月有一行的表。

尝试这个:

select CONCAT(SUBSTRING(ym, 5, 2), '/', SUBSTRING(ym, 1, 4)) Month, Count from ( 
  select EXTRACT(YEAR_MONTH FROM created) ym, count(*) Count
  from mytable
  where EXTRACT(YEAR_MONTH FROM created) > (EXTRACT(YEAR_MONTH FROM SUBDATE(NOW(), INTERVAL 1 YEAR))
  group by 1
  order by 1 desc) x

尝试:

select concat(month(created),'/',year(created)) as period, count(*) as cnt
from mytable
where control_number=1 and TIMESTAMPDIFF(year, created, now())=0
group by (month(created));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM