Mysql 停止查询跳过空值

Mysql 停止查询跳过空值,mysql,sql,null,aggregate-functions,Mysql,Sql,Null,Aggregate Functions,我有一个查询,显示我的应用程序中过去14天每天的呼叫数 查询: SELECT count(id) as count, DATE(FROM_UNIXTIME(timestamp)) as date FROM calls GROUP BY DATE(FROM_UNIXTIME(timestamp)) DESC LIMIT 14 在有0个呼叫的日期,此查询不显示这些日期。与其跳过那些日子,我希望在那个位置有一个0或NULL 有什么办法可以做到这一点吗?如果你对我的问题有任何疑问,请告诉我 感谢创建一

我有一个查询,显示我的应用程序中过去14天每天的呼叫数

查询:

SELECT count(id) as count, DATE(FROM_UNIXTIME(timestamp)) as date FROM calls GROUP BY DATE(FROM_UNIXTIME(timestamp)) DESC LIMIT 14
在有0个呼叫的日期,此查询不显示这些日期。与其跳过那些日子,我希望在那个位置有一个
0
NULL

有什么办法可以做到这一点吗?如果你对我的问题有任何疑问,请告诉我


感谢

创建一个表,其中包含您要确保结果中包含的每个日期的行,左外连接当前查询的结果,使用临时表的日期,上面查询的计数,如果该计数为空,则为0

我不相信您的查询是“跳过
null
值”,正如标题所示。相反,您的数据可能如下所示:

 id | timestamp
----+------------
  1 | 2014-01-01
  2 | 2014-01-02
  3 | 2014-01-04
因此,没有包含缺少日期的行,因此没有要统计的行。答案是,您需要生成一个包含所有所需日期的列表,然后对其执行
LEFT
RIGHT JOIN

CREATE TABLE days_ago_list (days_ago INTEGER);

INSERT INTO days_ago_list VALUES
 (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13)
;
不幸的是,MySQL并不像其他数据库那样简单。似乎没有一种有效的方法来生成任何内联内容的列表。所以你需要一张桌子

我想我应该创建一个静态表,其中包含一组从当前日期中减去的整数。然后,您可以使用此表内联生成日期列表,并将其加入

CREATE TABLE days_ago_list (days_ago INTEGER);

INSERT INTO days_ago_list VALUES
 (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13)
;
然后:

列出日期进行分组是非常重要的
call\u date
在没有呼叫的任何日子都将
NULL
。在
id
COUNT
也很重要,因为
NULL
id
s将不被计数。(这可确保您在没有呼叫的情况下获得正确的
0
计数。)如果需要更改列出的日期,只需更新包含整数列表的表即可

证明这一点


或者,如果这是针对web应用程序的,则可以在代码端生成日期列表,并在查询完成后将计数与日期匹配。这会使您的web应用程序逻辑变得更复杂,但也会简化查询并消除对额外表的需要。

对于您的数据结构,这恐怕是不可能的,因为日期(被跳过的日期)来自表中的行。如果没有行,就没有日期。您使用的是什么数据库?SQL Server?MySQL?PostgreSQL?什么样的数据类型是
timestamp
timestamp
是INT,它是一个mySQL数据库,可能是Temp表的副本?让它成为一张永久的桌子。您可以为财务信息等添加字段。为什么要说“如果这是一个web应用程序…”?web应用程序有什么特别之处?@LoztInSpace Fine,如果你想挑剔一些不必要的东西,可以改为“如果数据库上有某种代码”。高兴吗?