我需要所有日期的计数,包括不存在的日期 SELECT ifnull(COUNT(*),0) as num , date_format(c.dataCupo,"%d/%m/%Y") as data FROM cupons c WHERE c.dataCupo between "2017-02-02" AND "2018-05-04" AND c.proveidor!="VINCULADO" and c.empresa=1 group by date_format(c.dataCupo,"%Y-%m-%d")
//我要数所有的月份,包括不存在的月份
SELECT ifnull(COUNT(*),0) as num , date_format(c.dataCupo,"%m/%Y") as data
FROM cupons c
WHERE c.dataCupo between "2017-02-02" AND "2018-05-04" AND c.proveidor!="VINCULADO" and c.empresa=1
group by date_format(c.dataCupo,"%Y-%m")
//我需要计算所有年份,包括不存在的年份
SELECT ifnull(COUNT(*),0) as num , date_format(c.dataCupo,"%Y") as data
FROM cupons c
WHERE c.dataCupo between "2015-02-02" AND "2018-05-04" AND c.proveidor!="VINCULADO" and c.empresa=1
group by date_format(c.dataCupo,"%Y")
我想要的结果是:
02/02/2017 | 10
03/02/2017 | 0
04/02/2017 | 2
05/02/2017 | 0 ....
和
02/2017 | 50
03/2017 | 0
04/2017 | 10
以及
2015 | 0
2016 | 10
2017 | 15
2018 | 0
2条答案
按热度按时间fkaflof61#
您应该创建一个临时表来存储日期范围之间的所有日期范围
然后把它和你的table连接起来。
类似地,为月份和年份创建临时表,然后与主表联接,如上所述,以便分别获得月份和年份所需的结果。
x6h2sr282#
最简单的方法是使用日历表。这个表将有一个datetime列,您可以加入其中,它对于报告非常有用。下面是一个如何在mysql中创建一个的示例。
https://gist.github.com/bryhal/4129042
现在您已经有了日历表,可以加入它来查找某个日期范围内所有日期的计数。
全天示例:
所有月份示例: