当前位置: 首页 > 面试题库 >

MySQL-填写缺失的日期[重复]

颜熙云
2023-03-14
问题内容

这个问题已经在这里有了答案

MySQL如何填充范围内的缺失日期? (5个答案)

2年前关闭。

我有这个查询,我想用一些值(例如零…)填充缺失的日期。

SELECT date, SUM(val1) as sum_val  
FROM table1  
WHERE date BETWEEN '2016-03-04' AND '2016-03-10'  
GROUP BY date

结果如下:

|--------------------------  
|date, sum_val  
|--------------------------  
|2016-03-04, 21568  
|--------------------------  
|2016-03-05, 14789  
|--------------------------  
|2016-03-08, 20568  
|--------------------------  
|2016-03-10, 5841  
|--------------------------

如何用零值填充缺失的日期?有人有主意吗?

我需要这些数据来进行 图表 预览。


问题答案:

通常,您可以使用以下方法在MySQL中生成一系列N个整数:

    select (@i:=@i+1)-1 as `myval` from someTable,(SELECT @i:=0) gen_sub limit N

请注意,您联接的表(someTable)必须至少具有N行。 上面的-1是使它的基数为零…删除它,对于N = 3,您将得到1,2,3。

您可以将这些整数输入DATE_ADD函数,以将其转换为一系列日期。为了更容易理解,我们在日期中使用一些用户变量。

SET @date_min = '2016-03-04';
SET @date_max = '2016-03-10';

select DATE_ADD(@date_min, INTERVAL (@i:=@i+1)-1 DAY) as `date`
from information_schema.columns,(SELECT @i:=0) gen_sub
where DATE_ADD(@date_min,INTERVAL @i DAY) BETWEEN @date_min AND @date_max

这将返回这些日期以及它们之间每天的行。现在只需要对您的表进行连接即可…因为我没有您的数据库结构,所以我没有尝试过,但是类似以下的方法应该可以工作:

SET @date_min = '2016-03-04';
SET @date_max = '2016-03-10';

SELECT
   date_generator.date,
   ifnull(SUM(val1),0) as sum_val
from (
   select DATE_ADD(@date_min, INTERVAL (@i:=@i+1)-1 DAY) as `date`
   from information_schema.columns,(SELECT @i:=0) gen_sub 
   where DATE_ADD(@date_min,INTERVAL @i DAY) BETWEEN @date_min AND @date_max
) date_generator
left join table1 on table1.date = date_generator.date
GROUP BY date;


 类似资料:
  • 问题内容: 我有一个收藏。 产品浏览 我有一个查询,用于获取特定产品的每日视图。 询问 当前结果 问题 问题是,这种聚合不会在有视图的几天内返回。这会导致数据显示不正确: 结果应该看起来像 PS:最好输入开始和结束日期以基于此范围输出结果 问题答案: 您需要几个额外的步骤来返回默认值。首先,你需要使用与设置为收集所有结果中的一个文件内。然后,您可以将$ map 与一组天作为输入。在其中,您可以使用

  • 问题内容: 我有一个包含2列的表格,日期和分数。它最多有30个条目,最近30天内每个条目一个。 我的问题是缺少某些日期-我想看看: 我从单个查询中需要得到的是:19,21,9,14,0,0,10,0,0,14 …这意味着缺失的日期填充有0。 我知道如何获取所有值,以及如何使用服务器端语言遍历日期和缺少空格。但这是否可以在mysql中完成,所以我可以按日期对结果进行排序并得到缺失的片段。 编辑:在此

  • 问题内容: 我有一个MySQL查询问题,该查询按工作日将表中的数据分组。 我需要它来填充数据中缺少的工作日,例如下面的SQL示例中的星期日(工作日7)。 SQL小提琴 MySQL 5.6模式设置 : 查询1 : 结果 : 我希望它也返回此行。 我的完整查询非常复杂,因此希望您能找到一个快速的解决方案。 问题答案: 正常方法是:

  • 问题内容: 我有一个数据框架,如下所示 我想做的是在date列中找到最小和最大日期,并扩展该列使其具有所有日期,同时为该列填写。所以所需的输出是 问题答案: 初始数据框: 首先,将日期转换为日期时间: 然后,生成日期和唯一用户: 这将允许您创建一个MultiIndex: 您可以使用它来重新索引您的DataFrame: 然后可以按用户排序:

  • 问题内容: 天哪,它必须是如此简单,但我正在为“填写缺失的数据”问题而苦苦挣扎。 我有一个表,该表具有以下带有一些插入数据的列。 我想要的这张表是从2014年起的全部月份的付款值。 我尝试在select中使用IFNULL,但失败如此严重…而且stackoverflow的搜索结果通常会结合两个或多个表来处理信息。解决这个问题的最快,最好的解决方案是什么? 问题答案: 对于缺少的月份,您可以对所有月份

  • 问题内容: 我有两张表。 带有客户和日期的订单表。数据仓库中的日期维度表。 订单表并不包含给定月份中每个日期的活动,但是我需要返回一个填充日期和客户缺口的结果集。 例如,我需要这个: 看起来像这样: 这似乎是一个左外部联接,但它没有返回预期的结果。这是我正在使用的内容,但这并没有按预期返回日期表中的每个日期。 问题答案: 问题是您需要所有日期的所有客户。当您执行时,customer字段将为NULL