mysql-向表中添加丢失的日期记录

tp5buhyn  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(367)

我有一个数据集,它只包含工作日的数据。下面是它的样子:

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-06和2018-10-7的缺失记录需要通过最后可用值(2018-10-05)进行复制。因此,转换后的结果数据集如下所示:

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中解决这个问题上。
需要指导我如何进行。

bf1o4zei

bf1o4zei1#

嗯。这足够吗?

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 子查询中的子句。

相关问题