sql-server - SQL计算资历开始日期
问题描述
我有一个我自己无法解决的 SQL 问题。问题是我需要在员工表中计算资历开始日期。
该表相当简单,它有 4 列,第五列用于计算资历。
业务逻辑如下:如果员工在公司入职,6个月内停职再入职,则从入职日期开始计算其工龄。否则是新公司的开始日期。
我猜我们需要将员工的开始日期与员工的最后停止日期进行比较。
解决方案
下面的解决方案使用窗口函数来获取第一个值。
基于通过累积总和的排名。
这是基于开始日期和上一个结束日期之间的月差。
不完全漂亮,因为它使用 2 个子查询和 3 个窗口函数来完成看起来如此简单的事情。
但它确实返回了那些预期的结果。
select
EmployeeID, Departement, [Company Start Date], [Company End Date],
first_value([Company Start Date]) over (partition by EmployeeID, CummSumRank order by [Company Start Date]) as SeniorityStart
from
(
select *, sum(MonthDiffStartVersusPreviousEndToBig) over (partition by EmployeeID order by [Company Start Date]) as CummSumRank
from
(
select EmployeeID, Departement, [Company Start Date], [Company End Date],
iif(datediff(month, lag([Company End Date]) over (partition by EmployeeID order by [Company Start Date]), [Company Start Date]) > 6, 1, 0) as MonthDiffStartVersusPreviousEndToBig
from Employees
) as q1
) as q2
order by EmployeeID, [Company Start Date];
推荐阅读
- css - 为什么 Lighthouse 考虑 clip: rect(0 0 0 0) 作为可访问性的有效解决方案
- spring - Spring Boot/Spring Kafka 中的 KafkaTemplate 抛出 NullPointerException
- python - 并行/多处理运行大型 python 脚本
- sql - 外键指的是同一张表的主键列
- terraform - 使用 terraform 创建跨帐户角色时出现错误错误:要求用户输入时出错:无法解析变量 policy_arns 的值
- python - 想要从 groovy 脚本执行 python 代码
- rest - 为什么 symfony FOSRest 包找不到合适的控制器?
- json - 输入是一个列表,输出是列表中嵌套字典的形式
- r - 如何获得两个向量之间匹配的元素比例?
- google-sheets - 在谷歌表格中,有没有办法在跨越多年的月度数据表中输出每年列出的最后一个月的值?