MS SQL Server-如何为每个行项目生成结束日期
在表中,我有emp_id、rate_Efficial_date和hourly_rate列,但是没有rate_Efficial_end_date列 请帮助我查询每个行项目的生成率\有效\结束\日期 对于任何给定的员工,费率生效日期将从下一个费率生效日期-1开始计算MS SQL Server-如何为每个行项目生成结束日期,sql,sql-server,tsql,Sql,Sql Server,Tsql,在表中,我有emp_id、rate_Efficial_date和hourly_rate列,但是没有rate_Efficial_end_date列 请帮助我查询每个行项目的生成率\有效\结束\日期 对于任何给定的员工,费率生效日期将从下一个费率生效日期-1开始计算 Emp id | rate_effective_date | hourly_rate | rate_effective_end_date --------+---------------------+-------------+--
Emp id | rate_effective_date | hourly_rate | rate_effective_end_date
--------+---------------------+-------------+------------------------
1 | 01/01/17 | 50 | 06/29/17
1 | 06/30/17 | 55 | 09/30/17
1 | 10/01/17 | 45 | 12/31/17
1 | 01/01/18 | 60 | {null}
这将返回myTable中的所有字段,如果给定员工的另一条记录的生效日期晚于下一条记录的生效日期,则将返回计算为下一条记录生效日期前1天的生效日期。 如果没有后续记录,则返回的值将为空
; with cte as
(
select emp_id
, rate_effective_date
, hourly_rate
, row_number() over (partition by emp_id order by rate_effective_date ) r
from myTable
)
select a.emp_id
, a.rate_effective_date
, a.hourly_rate
, dateadd(day, -1, b.rate_effective_date) rate_effective_end_date
from cte a
left outer join cte b
on b.emp_id = a.emp_id
and b.r = a.r + 1
将lead函数与dateadd函数一起使用
换句话说,您也可以使用子查询
那么,利率有效期和结束日期是如何计算的呢?在不知道你的数据/逻辑是什么的情况下,我们究竟如何开始回答这个问题呢?请澄清您的问题。阅读以下内容:我的最佳猜测是查找和函数。但是投票结束。
select *,
dateadd(day, -1, lead(rate_effective_date) over(partition by Emp_id order by rate_effective_date)) as rate_effective_end_date
from table t;
select *,
dateadd(day, -1, (select top 1 rate_effective_date from table
where emp_id = t.emp_id and
rate_effective_date > t.rate_effective_date
order by rate_effective_date)
) as rate_effective_end_date
from table t;