MySQL-将缺失的日期记录添加到表中

时间:2018-10-26 14:45:16

标签: mysql sql

我有这个数据集,其中仅包含工作日的数据。这是它的样子:

ID  Name        Some Val    Other Val   Date

10  Somebody    33001.93    33001.93    2018-10-01
10  Somebody    33481.93    33481.93    2018-10-02
10  Somebody    33001.93    33001.93    2018-10-03
10  Somebody    33582.76    33582.76    2018-10-04
10  Somebody    33582.73    33582.79    2018-10-05
10  Somebody    33582.76    33582.76    2018-10-08
10  Somebody    33342.76    33342.76    2018-10-09
10  Somebody    33462.76    33462.76    2018-10-10

我的计算需要在一个月的所有天中填充数据。为了使数据可用,我还需要在周末填充数据。

在上述数据示例中,在这种情况下,需要通过最后一个可用值(2018-10-05)复制日期2018-10-06和2018-10-7的缺失记录。这样,转换后的结果数据集如下:

ID  Name        Some Val    Other Val   Date

10  Somebody    33001.93    33001.93    2018-10-01
10  Somebody    33481.93    33481.93    2018-10-02
10  Somebody    33001.93    33001.93    2018-10-03
10  Somebody    33582.76    33582.76    2018-10-04
10  Somebody    33582.73    33582.79    2018-10-05

10  Somebody    33582.73    33582.79    2018-10-06
10  Somebody    33582.73    33582.79    2018-10-07

10  Somebody    33582.76    33582.76    2018-10-08
10  Somebody    33342.76    33342.76    2018-10-09
10  Somebody    33462.76    33462.76    2018-10-10

我正在寻找有关如何保留丢失记录,在所有可用行之间循环以及在丢失记录处插入行的指南。我正在考虑创建一个包含所有日期值的查找表,将它们合并,如果没有匹配项,则需要插入最后一个可用值。

我在SQL方面的经验有限,并且来自SAS背景,我可以使用宏来完成此操作。我完全沉迷于如何在SQL中解决这个问题。

需要指导我如何进行。

1 个答案:

答案 0 :(得分:1)

嗯。 。 。这够吗?

select ID, Name, val1, val2, date
from t
union all
select id, name, val1, val2, date + interval 1 day
from t
where dayofweek(date) = 6
union all
select id, name, val1, val2, date + interval 2 day
from t
where dayofweek(date) = 6;

如果月份在星期五或星期六结束,则会增加一两天。您可以通过在子查询中使用where子句来解决此问题。