【发布时间】:2016-10-26 19:52:00
【问题描述】:
我正在使用 MS SQL Server 2014。我有一个跟踪员工的表,每次在应用程序中进行更改时,都会设置一个有效日期并插入一个新行,如下所示。
ID EmployeeID Job Title Effective Date
1 10 Sales Agent 10/1/2016
3 10 Sales Agent 10/5/2016
7 10 Sales Agent 2 10/15/2016
9 10 Sales Agent 3 10/20/2016
15 10 Sales Agent 3 10/16/2016
2 2 BSA III 10/1/2016
4 2 BSA II 10/1/2016
14 2 BSA III 10/1/2016
我需要遍历表格,如果职位名称发生变化,则插入具有新开始和结束日期的新行,如果没有新头衔,则忽略更改,除非它覆盖了生效日期上一行。员工组的最后一行应设置结束日期为 2999 年 1 月 1 日。我有 SSIS 或 SQL 可以做到这一点,但我只是不确定从哪里开始或如何解决这个问题。该过程完成后,表格结果应如下所示。
EmployeeID Job Title Start Date End Date
10 Sales Agent 10/1/2016 10/14/2016
10 Sales Agent 2 10/15/2016 10/15/2016
10 Sales Agent 3 10/16/2016 1/1/2999
2 BSA III 10/1/2016 1/1/2999
【问题讨论】:
-
最后一行的“职位”应该是“销售代理3”吧?
-
@FLICKER 是的,应该。谢谢,我已经更新了问题。
-
@Beth 否,因为第 15 行的行 ID 会用更早的生效日期覆盖第 9 行。
-
有什么改变可以让这个人倒退吗?我的意思是他们可以成为销售代理 2 2016 年 10 月 20 日吗?
-
@HolmesIV 是的,这是可能的。他们还可以从销售代理 2 转移到劳动力代理或组织内的任何其他职位组合。
标签: sql-server ssis