Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 日期间计数_Mysql_Date_Count_Ifnull - Fatal编程技术网

Mysql 日期间计数

Mysql 日期间计数,mysql,date,count,ifnull,Mysql,Date,Count,Ifnull,我需要所有日期的计数,包括不存在的日期 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,"%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")
选择ifnull(COUNT(*),0)作为num,选择date_格式(c.dataCupo,“%d/%m/%Y”)作为数据
来自库彭斯c
其中,c.dataCupo介于“2017-02-02”和“2018-05-04”之间,c.providor=“VINCULADO”和c.empresa=1
按日期分组\u格式(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")
//我需要计算所有年份,包括不存在的年份

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")
我想要的结果是:

2017年2月2日| 10

2017年2月3日| 0

2017年2月4日| 2

2017年2月5日| 0

2017年2月50日

2017年3月| 0

2017年4月10日

2015年| 0

2016年10月

2017年| 15


2018 | 0

最简单的方法是使用日历表。此表将有一个datetime列,您可以加入该列,它对于报告非常有用。下面是一个如何在MySQL中创建的示例

现在您已经有了日历表,您可以加入它来查找日期范围内所有日期的计数

全天示例:

select num, td.db_date
FROM 
time_dimension td 
left join 
   (SELECT ifnull(COUNT(*),0) as num , c.dataCupo 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 c.dataCupo) t
on t.data  = td.db_date
WHERE td.db_date between "2017-02-02" AND "2018-05-04" 
select 
    sum(t.num),
    CONCAT(month(td.db_date),"-",year(td.db_date))
FROM 
time_dimension td 
left join 
   (SELECT 
       ifnull(COUNT(*),0) as num , 
       c.dataCupo as data
   FROM cupons c 
   WHERE c.dataCupo between "2017-02-02" AND "2018-05-04" AND 
      c.proveidor!="VINCULADO" and c.empresa=1) t

on c.data = t.data 
WHERE td.db_date between "2017-02-02" AND "2018-05-04" 
group by CONCAT(month(td.db_date),"-",year(td.db_date))
所有月份示例:

select num, td.db_date
FROM 
time_dimension td 
left join 
   (SELECT ifnull(COUNT(*),0) as num , c.dataCupo 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 c.dataCupo) t
on t.data  = td.db_date
WHERE td.db_date between "2017-02-02" AND "2018-05-04" 
select 
    sum(t.num),
    CONCAT(month(td.db_date),"-",year(td.db_date))
FROM 
time_dimension td 
left join 
   (SELECT 
       ifnull(COUNT(*),0) as num , 
       c.dataCupo as data
   FROM cupons c 
   WHERE c.dataCupo between "2017-02-02" AND "2018-05-04" AND 
      c.proveidor!="VINCULADO" and c.empresa=1) t

on c.data = t.data 
WHERE td.db_date between "2017-02-02" AND "2018-05-04" 
group by CONCAT(month(td.db_date),"-",year(td.db_date))

您应该创建一个临时表来存储日期范围之间的所有日期范围

    CREATE TEMPORARY TABLE IF NOT EXISTS AllDateRange engine=memory 
 SELECT DATE(cal.date) Date
 FROM ( 
  SELECT  ( case when  @prmToDate = @prmFromDate then @prmFromDate else

  SUBDATE( @prmFromDate, INTERVAL  (DATEDIFF(@prmToDate,@prmFromDate))  DAY) + INTERVAL xc DAY end ) AS Date 
  FROM ( 
        SELECT @xi:=@xi+1 as xc from 
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) xc1, 
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) xc2, 
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) xc3, 
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) xc4, 
        (SELECT @xi:=+1) xc0 
  ) xxc1 
   ) cal WHERE DATE( cal.date)  >=  DATE(@prmFromDate)  and DATE( cal.date) <= DATE(@prmToDate)    ;

同样地,创建月份和年份的临时表,然后加入主表,如上所述,以分别获得所需的月份和年份结果。

样本数据在哪里?2017年2月2日| 2017年2月10日| 2017年2月4日| 2017年2月2日| 2017年2月5日| 0。。。。以及2017年2月50日2017年3月0日2017年4月10日和2015年0日2016年10月2017年15日2018年10月10日可能的副本