sql - 清理 Teradata 临时表中的错误删除/插入
问题描述
寻找一种方法来清理多年来发生错误删除/插入的临时表中的一些数据。当周期值重叠/满足时,我能够使用 NORMALIZE,但是,我现在遇到了周期不重叠/满足的问题。我想巩固这些时期。
前:
后:
我最初的计划是采用 min(begin(eff_vt_dttm)) 和 max(end(eff_vt_dttm)) 并在按所有列分组后创建一个新时期。问题是行值重复的边缘情况,例如第 1 行和第 2 行应该合并,但不希望第 5 行和第 6 行与第 1 行和第 2 行合并。第 1 行和第 2 行应该合并到它们自己的行,第 5 行和 6 也应该合并到他们自己的行中。我正在考虑创建分组,以便我可以获取组的最小值/最大值,但遇到了困难。
分组思路:
想知道是否有人知道解决此问题的好方法。
谢谢!
解决方案
由于我对您的帖子的评论中指出的原因,这是未经测试的。
它使用称为间隙和孤岛的概念来识别值保持不变的连续记录。这些在最终图像中形成您的“组”。
WITH
sorted AS
(
SELECT
your_data.*,
ROW_NUMBER() OVER (PARTITION BY id
ORDER BY BEGIN(eff_vt_dttm)
)
AS seq_num_id,
ROW_NUMBER() OVER (PARTITION BY id, col1, col2
ORDER BY BEGIN(eff_vt_dttm)
)
AS seq_num_id_col1_col2
FROM
your_data
)
SELECT
s.id,
s.col1,
s.col2,
PERIOD(
MIN(begin(s.eff_vt_dttm)),
MAX(end(s.eff_vt_dttm))
)
AS eff_vt_dttm
FROM
sorted AS s
GROUP BY
s.id,
s.col1,
s.col2,
s.seq_num_id - s.seq_num_id_col1_col2
ORDER BY
s.id,
MIN(begin(s.eff_vt_dttm))
推荐阅读
- templates - 将变量与字符串连接并将其设置在新变量中
- hana - SAP HANA“接管”选项灰显
- python - 如何在 jupyter PySpark 会话中更改 SparkContext 属性 spark.sql.pivotMaxValues
- c# - 无法隐式转换列表
- > 到 IList
>? - android - 三星 S8 手机如何修改 Always On 屏幕的应用程序图标?
- java - React-Native build release apk 执行 aapt 失败
- python - 无法在我的 Python 的 init.py 文件中访问 Kubernetes env var
- python - 写入html文件时删除方括号?
- javascript - Angular 4 动画正在初始化组件上执行
- mysql - 搜索距离邮政编码最近的 5 个位置 - 我应该怎么走?