2014-01-15 49 views
0

在表中的原始数据X如何显示在SQL中的记录,只有最近30天

+----------+-----+ 
|Date  |Count| 
+----------+-----+ 
|2014-01-15|44 | 
+----------+-----+ 
|2014-01-01|5 | 
+----------+-----+ 
|2013-12-10|1 | 
+----------+-----+ 

我想显示如下:

+----------+-----+ 
|Date  |Count| 
+----------+-----+ 
|2014-01-15|44 | 
+----------+-----+ 
|2014-01-14|0 | 
+----------+-----+ 
|2014-01-13|0 | 
+----------+-----+ 
|2014-01-12|0 | 
+----------+-----+ 
|...  |... | 

* P/S等直到2013-12-14或2013-12-15

*如何解决问题 - 'curdate'/'NOW'/'subdate'不是公认的内置函数名称。

+2

你在使用什么数据库引擎? –

+0

无论RDBMS如何,您都可以使用Numbers表进行此操作。随着大多数RBDMS,你可以使用递归查询 – cha

+0

我使用mysql – user43698

回答

0

一种选择是创建日期查找表,然后使用outer joindate_sub。该查询应该为你工作:

select d.datefield, coalesce(x.count,0) count 
from datelookup d 
    left join x on d.datefield = x.datefield 
where d.datefield > date_sub(curdate(), interval 30 day) 
    and d.datefield <= curdate() 
order by d.datefield desc 
+0

嗨,它是否必须有一个日期查找表才能显示它? – user43698

+0

存在错误 - “curdate”不是公认的内置函数名称。 – user43698

2

在MySQL中,你必须做一些事情是这样的:

select date_sub(date(now()), interval n.n day), coalesce(t.`count`, 0) 
from (select 0 as n union all select 1 union all select 2 union all select 3 union all 
     . . . 
     select 30 
    ) n left join 
    table t 
    on t.date = date_sub(date(now()), interval n.n day); 

,第一部分是一本手册列表30个数字。