【发布时间】:2020-01-18 04:57:30
【问题描述】:
好的,这个可能有点棘手,所以让我从视觉开始。
数据如下所示: Original Data From Source
我正在尝试简化它,使其看起来像这样: End Result that I'm working towards
问题是我有一个员工改回以前的经理,所以当我尝试对数据进行分区和分组时,这两个实例组合在一起,我最终得到如下所示的数据: Actual Results
在上图中,我们可以看到经理 Tom 的开始和结束日期在经理 Bob 的开始和结束日期内,这是一个错误。关于如何隔离稍后重新引入的项目的分组的任何建议?我相信这将由 Start Date 和 Rank over Partition 决定,但我似乎无法让它发挥作用。
这是构建示例数据的查询:
CREATE VOLATILE TABLE VT_AGENT
(
EmpID INT
,Manager VARCHAR(16)
,Director VARCHAR(16)
,Record_Start DATE
,Record_End DATE
) ON COMMIT PRESERVE ROWS;
INSERT INTO vt_agent VALUES(12345678, 'Jill M.', 'Mike B.', '2019-08-21', '2019-09-07');
INSERT INTO vt_agent VALUES(12345678, 'Jill M.', 'Mike B.', '2019-09-07', '2019-09-16');
INSERT INTO vt_agent VALUES(12345678, 'Bob S.', 'Mike B.', '2019-09-16', '2019-10-15');
INSERT INTO vt_agent VALUES(12345678, 'Bob S.', 'Mike B.', '2019-10-15', '2019-11-23');
INSERT INTO vt_agent VALUES(12345678, 'Tom A.', 'Mike B.', '2019-11-23', '2019-12-07');
INSERT INTO vt_agent VALUES(12345678, 'Tom A.', 'Mike B.', '2019-12-07', '2019-12-12');
INSERT INTO vt_agent VALUES(12345678, 'Bob S.', 'Mike B.', '2019-12-12', '2020-01-15');
INSERT INTO vt_agent VALUES(12345678, 'Bob S.', 'Mike B.', '2020-01-15', '9999-12-31');
Select * FROM VT_AGENT
【问题讨论】:
-
通常我会对此使用 normalize,但您的 Bob S 和 Mike B 的记录与该组合的所有其他记录重叠,从 2019-01-15 到 9999-12- 31.换句话说,我会说你的实际结果是正确的。
-
我猜最后一条记录应该是
INSERT INTO vt_agent VALUES(12345678, 'Bob S.', 'Mike B.', '2020-01-15', '9999-12-31');? -
是的,2019-01-15 是一个错字。我手动重新输入了一些数据以进一步简化示例数据并犯了人为错误,好眼力!然而,非拼写数据存在问题。
标签: duplicates teradata partition