Mysql 如何在sql中仅显示最近30天的记录

Mysql 如何在sql中仅显示最近30天的记录,mysql,sql,Mysql,Sql,表X中的原始数据 +----------+-----+ |Date |Count| +----------+-----+ |2014-01-15|44 | +----------+-----+ |2014-01-01|5 | +----------+-----+ |2013-12-10|1 | +----------+-----+ 我想显示的内容如下: +----------+-----+ |Date |Count| +----------+-----+ |

表X中的原始数据

+----------+-----+
|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    |
+----------+-----+
|...       |...  |
*直到2013年12月14日或2013年12月15日的p/s等


*如何解决此问题-“curdate”/“NOW”/“subdate”不是可识别的内置函数名。

一个选项是创建一个日期查找表,然后使用带有
日期子项的
外部联接。此查询适用于您:

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
选择d.datefield,合并(x.count,0)计数
从日期查询
d.datefield=x.datefield上的左连接x
其中d.datefield>date_sub(curdate(),间隔30天)

在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个数字的手动列表。

您使用的是什么数据库引擎?无论RDBMS如何,您都可以使用数字表来执行此操作。对于大多数RBDM,您可以使用递归查询HI,它是否必须具有日期查找表才能显示?存在错误-“curdate”不是可识别的内置函数名。