【发布时间】:2020-09-28 21:50:21
【问题描述】:
我有这张表 Employee_Hire,其中包含部门中员工 (ID) 的雇用日期。现在我想编写一个 Select 查询,它增加了一个列(Last_day)来显示他在那个部门工作的最后一天。例如,对于部门 D01 中的 ID = 1,他的最后一天是 2014/12/31。同样在 D02 中,他的最后一天是 2017/12/31。
现在由于他仍在 D04 工作,我们可以有一个像“Till Present”这样的字符串或像 2099/12/31 这样的未来日期或任何符合目的的日期。
我想对表中的每个员工都这样做。
+---+-------------+------------+
| Id| Dept_name | Hiredate |
+---+-------------+------------+
| 1 | D01 | 2012-01-01 |
| 1 | D02 | 2015-01-01 |
| 1 | D03 | 2018-01-01 |
| 1 | D04 | 2019-01-01 |
| 2 | D01 | 2010-01-01 |
| 2 | D02 | 2012-01-01 |
| 3 | D01 | 2008-01-01 |
| 3 | D02 | 2010-01-01 |
| 3 | D03 | 2012-01-01 |
| 4 | D01 | 2015-01-01 |
| 4 | D02 | 2017-01-01 |
+---+-------------+------------+
我知道这可以使用 LEAD OR LAG 函数来完成,但是谁能告诉我如何使用 Self Join 来做到这一点?
提前致谢!!
【问题讨论】:
标签: sql sql-server tsql sql-server-2012