Mysql 根据混合日期填写缺少的行

Mysql 根据混合日期填写缺少的行,mysql,sql,etl,informatica,informatica-cloud,Mysql,Sql,Etl,Informatica,Informatica Cloud,我正在Informatica IICS中执行映射,并试图根据几个字段填充数据集中缺失的行 下面是数据的示例表。有一个ID字段,一个Week\u Start字段是报告数据的那一周的开始日期,一个相应的Week\u编号和一个Year字段,指定数据属于上一年或本年Sales是该特定ID进行的销售数量,Sales\u Type是销售类别 但是,有些日期特定的人没有进行销售,因此与该数据对应的行丢失。我想用所有相关信息填写这些行,并将Sales字段设置为0 我的实际数据有6周的信息窗口,包括上一年和本年的

我正在Informatica IICS中执行映射,并试图根据几个字段填充数据集中缺失的行

下面是数据的示例表。有一个
ID
字段,一个
Week\u Start
字段是报告数据的那一周的开始日期,一个相应的
Week\u编号
和一个
Year
字段,指定数据属于上一年或本年
Sales
是该特定ID进行的销售数量,
Sales\u Type
是销售类别

但是,有些日期特定的人没有进行销售,因此与该数据对应的行丢失。我想用所有相关信息填写这些行,并将
Sales
字段设置为0

我的实际数据有6周的信息窗口,包括上一年和本年的7种不同销售类型。所以我希望每个ID有6x2x7=84行。也就是说,如果我有100个唯一的ID,我的最终表应该有8400行

缺少行的表:

+----+------------+-------------+---------+-------+------------+
| ID | Week_Start | Week_Number |  Year   | Sales | Sales_Type |
+----+------------+-------------+---------+-------+------------+
|  1 | 01/01/2018 |           1 | Prior   |     1 | A          |
|  1 | 01/08/2018 |           2 | Prior   |     3 | A          |
|  1 | 01/15/2018 |           3 | Prior   |     3 | A          |
|  1 | 01/29/2018 |           5 | Prior   |     4 | A          |
|  1 | 01/01/2019 |           1 | Current |     2 | A          |
|  1 | 01/08/2019 |           2 | Current |     4 | A          |
|  1 | 01/15/2019 |           3 | Current |     1 | A          |
|  1 | 01/22/2019 |           4 | Current |     1 | A          |
|  1 | 01/01/2018 |           1 | Prior   |     1 | B          |
|  1 | 01/08/2018 |           2 | Prior   |     3 | B          |
|  1 | 01/15/2018 |           3 | Prior   |     3 | B          |
|  1 | 01/29/2018 |           5 | Prior   |     4 | B          |
|  1 | 01/01/2019 |           1 | Current |     2 | B          |
|  1 | 01/08/2019 |           2 | Current |     4 | B          |
|  1 | 01/15/2019 |           3 | Current |     1 | B          |
|  1 | 01/22/2019 |           4 | Current |     1 | B          |
+----+------------+-------------+---------+-------+------------+
填写缺少行的预期结果:

+----+------------+-------------+---------+-------+------------+
| ID | Week_Start | Week_Number |  Year   | Sales | Sales_Type |
+----+------------+-------------+---------+-------+------------+
|  1 | 01/01/2018 |           1 | Prior   |     1 | A          |
|  1 | 01/08/2018 |           2 | Prior   |     3 | A          |
|  1 | 01/15/2018 |           3 | Prior   |     3 | A          |
|  1 | 01/22/2018 |           4 | Prior   |     0 | A          |
|  1 | 01/29/2018 |           5 | Prior   |     4 | A          |
|  1 | 01/01/2019 |           1 | Current |     2 | A          |
|  1 | 01/08/2019 |           2 | Current |     4 | A          |
|  1 | 01/15/2019 |           3 | Current |     1 | A          |
|  1 | 01/22/2019 |           4 | Current |     1 | A          |
|  1 | 01/29/2019 |           5 | Current |     0 | A          |
|  1 | 01/01/2018 |           1 | Prior   |     1 | B          |
|  1 | 01/08/2018 |           2 | Prior   |     3 | B          |
|  1 | 01/15/2018 |           3 | Prior   |     3 | B          |
|  1 | 01/22/2018 |           4 | Prior   |     0 | B          |
|  1 | 01/29/2018 |           5 | Prior   |     4 | B          |
|  1 | 01/01/2019 |           1 | Current |     2 | B          |
|  1 | 01/08/2019 |           2 | Current |     4 | B          |
|  1 | 01/15/2019 |           3 | Current |     1 | B          |
|  1 | 01/22/2019 |           4 | Current |     1 | B          |
|  1 | 01/29/2019 |           5 | Current |     0 | B          |
+----+------------+-------------+---------+-------+------------+
我曾尝试在ICS中使用转换,但没有一个实现了我想要做的。关于如何做到这一点,我的最佳猜测是在SQL中使用递归CTE,并引入SQL脚本来生成这些缺失的行


我的问题是,如何在多个分区上执行此操作?我感兴趣的不仅仅是错过日期,而是错过了两年和几种不同类型的销售。由于
Week\u Start
列包含混合数据,这一点更加复杂。我早期尝试这样做的结果是在2018年的日期和2019年的数据之间生成所有行。

使用
交叉连接
生成行,使用
左连接
引入值:

select w.week_start, w.week_number, ys.year, ys.sales_type,
       coalesce(t.sales, 0) as sales
from (select distinct week_start, week_number from t) w cross join
     (select distinct year, sales_type from t) ys left join
     t
     on t.week_start = w.week_start and
        t.year = ys.year and
        t.sales_type = ys.sales_type;

“在2018年的日期和2019年的数据之间生成所有行”——对我来说听起来并不太糟糕。比如100周*7种类型=700行。这是一次性任务,还是您需要“动态”生成结果?您应该使用表达式转换,从sequence generator获取一组值(包括每次生成新值时递增7的选项),并与2018年1月1日的值相加,依此类推。这将帮助您实现每周的日期。使用add-to_date函数,日期作为第一个参数,序列生成器的值作为第二个值。添加至日期(发货日期'DD',7)