Mysql 如何在sql中仅显示最近30天的记录
表X中的原始数据Mysql 如何在sql中仅显示最近30天的记录,mysql,sql,Mysql,Sql,表X中的原始数据 +----------+-----+ |Date |Count| +----------+-----+ |2014-01-15|44 | +----------+-----+ |2014-01-01|5 | +----------+-----+ |2013-12-10|1 | +----------+-----+ 我想显示的内容如下: +----------+-----+ |Date |Count| +----------+-----+ |
+----------+-----+
|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”不是可识别的内置函数名。