【问题标题】:Most recent employee position in date period日期期间最近的员工职位
【发布时间】: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


【解决方案1】:

你可以这样做:

SELECT ...
FROM yourtable a
LEFT JOIN yourtable b
ON a.EMPLOYEEID = b.EMPLOYEEID and a.DATETO > b.DATETO
WHERE b.EMPLOYEEID IS NULL

解释:您搜索a 记录,其中不存在这样的b 记录,它具有相同的EMPLOYEEID,并且具有更高的DATEFROM

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多