首页 > 解决方案 > Teradata - 不能折叠重叠的行并保留间隙

问题描述

鉴于这个可爱的数据集具有各种差距和重叠记录:

+---+--------+------+-------+-------+-----------+------------+------------+
|   | BUS_LN | SGMT | STATE | TheID | ASSGND_TO |   EFF_DT   |   END_DT   |
+---+--------+------+-------+-------+-----------+------------+------------+
| 1 | A      | B    | LA    | 12345 | AAA       | 2015-01-01 | 2015-06-30 |
| 2 | A      | B    | LA    | 12345 | AAA       | 2015-10-01 | 2015-12-31 |
| 3 | A      | B    | LA    | 12345 | AAA       | 2016-01-01 | 2016-02-29 |
| 4 | A      | B    | LA    | 12345 | AAA       | 2016-03-01 | 2017-12-31 |
| 5 | A      | B    | LA    | 12345 | AAA       | 2018-01-01 | 9999-12-31 |
| 6 | A      | B    | LA    | 67890 | BBB       | 2015-01-01 | 2016-01-01 |
| 7 | A      | B    | LA    | 67890 | BBB       | 2016-01-01 | 2017-01-01 |
| 8 | A      | B    | LA    | 67890 | CCC       | 2017-01-01 | 2018-01-01 |
| 9 | A      | B    | LA    | 67890 | BBB       | 2018-01-01 | 9999-12-31 |
+---+--------+------+-------+-------+-----------+------------+------------+

如何在保留间隙和变化的同时折叠重叠?第 1 行和第 2 行之间存在间隙。第 3 行到第 5 行重叠。第 6 行和第 7 行重叠。

它最终应该是:

+--------+------+-------+-------+-----------+------------+------------+
| BUS_LN | SGMT | STATE | TheID | ASSGND_TO |   EFF_DT   |   END_DT   |
+--------+------+-------+-------+-----------+------------+------------+
| A      | B    | LA    | 12345 | AAA       | 2015-01-01 | 2015-06-30 |
| A      | B    | LA    | 12345 | AAA       | 2015-10-01 | 9999-12-31 |
| A      | B    | LA    | 67890 | BBB       | 2015-01-01 | 2017-01-01 |
| A      | B    | LA    | 67890 | CCC       | 2017-01-01 | 2018-01-01 |
| A      | B    | LA    | 67890 | BBB       | 2018-01-01 | 9999-12-31 |
+--------+------+-------+-------+-----------+------------+------------+

我整天都在不同的圈子里,最近一次是记录非常糟糕的TD_NORMALIZE_OVERLAP_MEET功能,但我一无所获。

标签: teradata

解决方案


看看 Teradata 的 Temporal 功能: - 它提供了一个 PERIOD 数据类型(而不是两个日期字段) - 它提供了规范化/分解/重叠/汇总有效日期期间的功能。


推荐阅读