如何分离RowNumber计数?

问题描述 投票:0回答:1

我正在尝试在我的组织中创建一个时间点层次结构。 我遇到的问题是,有些人在职业生涯中不止一次向同一位经理汇报。 我尝试对他们的 ID 和经理执行 row_number,但正如预期的那样,当他们向同一经理报告时,计数会继续。 一些示例数据:

身份证 经理ID EFF_DT EXP_DT RWNUM
1 2 2020年5月24日 2020年6月30日 1
1 2 20202年7月1日 2020年8月25日 2
1 2 2020年8月26日 2020年9月12日 3
1 3 2020年10月12日 2021 年 1 月 29 日 1
1 3 2021 年 1 月 30 日 2021 年 5 月 30 日 2
1 3 2021 年 5 月 31 日 2021 年 7 月 15 日 3
1 4 2021 年 7 月 16 日 2021 年 8 月 30 日 1
1 4 2021 年 9 月 1 日 2021 年 9 月 15 日 1
1 2 2021 年 9 月 16 日 2021 年 12 月 31 日 4
1 2 2022 年 1 月 1 日 2022 年 3 月 31 日 5

因此,当该员工向经理 2 报告时,行号计数为 4 和 5。SQL 中有没有办法将其重置并计数为 1 和 2?
所需最终数据示例:

身份证 经理ID EFF_DT EXP_DT
1 2 2020年5月24日 2020年9月12日
1 3 2020年10月12日 2021 年 7 月 15 日
1 4 2021 年 7 月 16 日 2021 年 9 月 15 日
1 2 2021 年 9 月 16 日 2022 年 3 月 31 日

我认为最好的方法是使用窗口函数,但我无法找出获得此结果的简单方法。 欢迎大家提出建议,谢谢!

我创建的表格错误,然后去编辑它们。 当我完成第一个表时,Stackoverflow 自动保存了编辑,并且不会让我在第二个表上保存此编辑,直到我使正文完全不同,所以我添加这一段希望满足该要求。

sql teradata rank row-number
1个回答
0
投票

如果您想将连续行折叠为单行,可以使用 Teradata

normalize
函数。它仅适用于句点,因此我们必须将您的日期转换为句点。

select
id,
manager_id,
begin(prd) as eff_dt,
last(prd) as exp_dt
from (
select normalize
id,
manager_id,
period(eff_dt,exp_dt + 1) as prd
from
<your table>) t
© www.soinside.com 2019 - 2024. All rights reserved.