2016-05-11 25 views
0

我希望从现在起7天前我的表数据的数量有日期范围。所以,我曾尝试此查询:启用查找日期范围内的所有日期范围中的数据mysql前

SELECT DATE(leads_update_on), IFNULL(COUNT(*),0) leads 
    FROM tbl_leads 
    WHERE project_id=4 
    AND DATE(leads_update_on) >= DATE_SUB('2016-05-11', INTERVAL 6 DAY) 
    GROUP BY DATE(leads_update_on) 

但它返回以下结果:

 `DATE(leads_update_on)|leads 
     ----------------------|----- 
     2016-05-06   | 7 
     2016-05-07   | 4` 

由于其他日期没有任何数据,但我要像下面的结果,如果在特定日期没有数据:

 `DATE(leads_update_on)|leads 
     ----------------------|----- 
     2016-05-05   | 0 
     2016-05-06   | 7 
     2016-05-07   | 4 
     2016-05-08   | 0 
     2016-05-09   | 0 
     2016-05-10   | 0 
     2016-05-11   | 0` 

我必须改变我的sql查询,以便我可以找到上述结果。任何帮助将不胜感激。提前致谢。根据要求

样品输入:

`DATE    |id 
    ----------------------|----- 
    2016-05-06   | 1 
    2016-05-07   | 2 

这里只有两个数据存在如此他人日期应该返回0值。它应该像这样的输出:

 `DATE(date)   |leads 
     ----------------------|----- 
     2016-05-05   | 0 
     2016-05-06   | 1 
     2016-05-07   | 1 
     2016-05-08   | 0 
     2016-05-09   | 0 
     2016-05-10   | 0 
     2016-05-11   | 0` 

但是使用这个查询: -

SELECT DATE(`date`), IFNULL(COUNT(*),0) leads FROM test where DATE(`date`) >= DATE_SUB('2016-05-11', INTERVAL 6 DAY) GROUP BY DATE(`date`) 

它返回下面的结果是我不想

 `DATE(date)   |leads 
     ----------------------|----- 
     2016-05-06   | 1 
     2016-05-07   | 1` 
+0

这里有一个解决这个问题的书面记录。 http://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/ –

回答

0

从我个人理解您需要更改您的if null条件

更新

select distinct(res.leadDate), res.leads from   
(select mon.aDate as leadDate , ifnull(sa.leads, 0) as leads 
    from (
    select '2016-05-11' - interval (a.a) day as aDate from 
    (select 0 as a union all select 1 union all select 2 union all select 3 
    union all select 4 union all select 5 union all select 6 union all 
    select 7 union all select 8 union all select 9) a 
) mon 
left join tbl_leads sa on mon.aDate = sa.leads_date) res, tbl_leads ss 
where res.leadDate between ss.leads_date and '2016-05-11' 
order by res.leadDate asc; 
+0

我已经给出了我想要的预期输出,如果某些日期没有值,则计数应该为零。您的查询返回数据: - 'DATE(leads_update_on)| leads ---------------------- | ----- 2016-05-06 | 0 2016-05-07 | 0' –

+0

你可以发布样本输入数据吗? –

+0

请看我更新的问题我已经把示例输入。请注意,这仅仅是一个示例,不是确切的输入 –