我有这个数据集,其中仅包含工作日的数据。这是它的样子:
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中解决这个问题。
需要指导我如何进行。
答案 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
子句来解决此问题。