使用T-SQL,我有一个表[EMP]:
Id | SD | ED | Status | Assignment |
---|---|---|---|---|
1 | 1/1/2020 | 1/15/2020 | A | A1 |
1 | 1/16/2020 | 2/1/2020 | T | null |
1 | 2/2/2020 | 3/20/2021 | A | null |
1 | 3/21/2021 | 10/1/2022 | A | B6 |
3 | 10/15/2022 | 5/12/2023 | A | A1 |
2 | 1/3/2022 | 2/1/2022 | A | B2 |
2 | 2/2/2022 | 11/1/2023 | T | null |
1 | 10/2/2022 | 1/1/2023 | T | null |
1 | 1/2/2023 | 5/12/2023 | A | A1 |
2 | 11/2/2023 | 5/12/2023 | A | A8 |
ID是员工ID,SD是记录生效开始日期,ED是记录生效结束日期,状态是聘用状态(A=活动,T=终止)
我try 添加两个额外的列,一个是员工的原始雇用日期(每个ID的最早SD,状态=‘A’),另一个是该记录的最近雇用日期(记录后面的最早SD,其中Status=‘T’,即原始雇用日期).
我可以收集原始的雇佣日期:
SELECT Id, SD, ED, Status, Assignment, OriginalHireDate
FROM EMP t1
INNER JOIN (
SELECT Id, MIN(SD) AS OriginalHireDate
FROM EMP
WHERE Status = 'A'
GROUP BY Id
) t2 ON t1.Id = t2.Id
但我可能想得太多了,该如何获取每条记录的最新招聘日期.所需的输出为:
Id | SD | ED | Status | Assignment | OriginalHireDate | RecentHireDate |
---|---|---|---|---|---|---|
1 | 1/1/2020 | 1/15/2020 | A | A1 | 1/1/2020 | 1/1/2020 |
1 | 1/16/2020 | 2/1/2020 | T | null | 1/1/2020 | 1/1/2020 |
1 | 2/2/2020 | 3/20/2021 | A | null | 1/1/2020 | 2/2/2020 |
1 | 3/21/2021 | 10/1/2022 | A | B6 | 1/1/2020 | 2/2/2020 |
3 | 10/15/2022 | 5/12/2023 | A | A1 | 10/15/2022 | 10/15/2022 |
2 | 1/3/2022 | 2/1/2022 | A | B2 | 1/3/2022 | 1/3/2022 |
2 | 2/2/2022 | 11/1/2023 | T | null | 1/3/2022 | 1/3/2022 |
1 | 10/2/2022 | 1/1/2023 | T | null | 1/1/2020 | 2/2/2020 |
1 | 1/2/2023 | 5/12/2023 | A | A1 | 1/1/2020 | 1/2/2023 |
2 | 11/2/2023 | 5/12/2023 | A | A8 | 1/3/2022 | 11/2/2023 |