mysql - MySQL - 将缺失的日期记录添加到表中
问题描述
我有这个数据集,其中仅包含工作日的数据。这是它的样子:
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 中解决这个问题。
需要指导我如何进行。
解决方案
嗯。. . 这足够了吗?
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
在子查询中使用子句来解决这个问题。
推荐阅读
- ios - 使用 XCode 12 构建错误
- c++ - 当比较器返回 true 时,C++ std::sort 自定义比较器无限期运行
- java - 使用 AspectJ 处理 AOP 中的proceed() 赋值中的 void 方法
- database-design - 在数据仓库中建模双时态数据集
- firebase - Flutter 正确地从 firebase 获取数据
- c++ - 为什么 bool 数组的 int 类型输出不是 1 或 0?
- c# - 在 azure API 管理策略中迭代数组声明
- python-3.x - 如何将 SSLContext 与 Python 请求库一起使用?
- python - 如何使用 Python 将特定列的每周数据转换为每日数据
- pandas - 轴未显示在绘图栏中 kind=bar in pandas