【发布时间】:2021-11-17 20:38:21
【问题描述】:
我正在尝试从以下数据中完成两件事:
| EMPLOYEEID | POSITION | DATEFROM | DATETO |
|---|---|---|---|
| 0760891 | Associate Director | 2014-10-28 00:00:00.000 | 2018-05-11 00:00:00.000 |
| 0760891 | Executive Director | 2018-05-14 00:00:00.000 | NULL |
| 1048137 | Assistant Director | 2019-07-08 00:00:00.000 | 2021-07-12 00:00:00.000 |
| 1048137 | Coordinator | 2021-07-13 00:00:00.000 | NULL |
我们使用从 5 月到 4 月 (5/1 - 4/30) 的评估年。因此,对于每个 EMPLOYEEID,我需要如下所示的输出:
| EMPLOYEEID | Position | Evaluation Year |
|---|---|---|
| 0760891 | Associate Director | 2015 |
| 0760891 | Associate Director | 2016 |
| 0760891 | Associate Director | 2017 |
| 0760891 | Associate Director | 2018 |
| 0760891 | Associate Director | 2019 |
| 0760891 | Executive Director | 2020 |
| 0760891 | Executive Director | 2021 |
| 0760891 | Executive Director | 2022 |
| 1048137 | Assistant Director | 2020 |
| 1048137 | Assistant Director | 2021 |
| 1048137 | Assistant Director | 2022 |
第一个要求:对于 DATEFROM 和 DATETO 之间的任何评估年份,每个 EMPLOYEEID“填写”职位和评估年份行。
第二个要求:如果两个职位的 DATETO 和 DATEFROM 值在一个评估年度内重叠,则仅返回每个 EMPLOYEEID 和评估年度的最后一个在职职位。
我遇到的问题是,在以下情况下,我似乎无法获得最新(最后一个)职位——例如在此处的 EMPLOYEEID 1048137 的情况下 - 在同一评估年度中有两个“活动”职位(在评估年度开始或结束)。该员工的 2022 年评估值应该是 Coordinator,而不是 Assistant Director,但我编写的代码正在生成上面第二个表格中所示的输出。看起来我应该能够使用 ROW_NUMBER 来获得我需要的东西,但我正在努力尝试正确实现它(如果事实上,我需要为这个问题实现它)。
SQL Server 2014。
非常感谢您的关注。
【问题讨论】:
-
OUTER JOIN a year table/cte.
-
为什么当
0760891成为2019中的Associate Director时,它们在2018-05-14 00:00:00.000上合二为一?当您的 2019 年开始时 (2019-05-01),他们在 几乎一整年的时间里一直是Executive Director。 -
抱歉,@Larnu,是的,我们的评估年度就像一个从 7 月 1 日开始的财政年度。所以 2021 年 7 月 1 日是 2022 财政年度。对于我们的评估年度,2021 年 5 月 1 日是第一天2022 年评估年。0760891 在 2022 年评估年仅担任了两周的执行董事,但那是我想在我的最终结果集中显示的值,不是助理主管职位(与 1048137 相同的问题)。
-
“我们使用从 5 月到 4 月(5/1 - 4/30)的评估年。” Vs “我们的评估年就像一个财政年度从 7 月 1 日开始的年份。” 这些陈述相互冲突。
-
这也不能解释为什么这个人在 2019 年拥有另一个头衔,而他们从来没有这样做过
标签: sql sql-server