如何通过SQL获取员工入职90天及1年后的薪资率?
获取入职90天及1年后的薪资率解决方案
你考虑到周度薪资核算的时间差这点非常关键——毕竟很少会刚好在第90天或者满1年当天做薪资更新,所以用时间范围来匹配是完全正确的思路。我来帮你把这个逻辑优化得更严谨:
核心思路
因为薪资是周度核算,我们需要把目标日期(入职+90天、入职+1年)前后扩展一个完整的薪资周周期,确保不会漏掉对应的薪资记录。你之前用的+90到+97(7天范围)逻辑没问题,1年的情况同理,我们可以给入职满365天的日期也加上7天的缓冲范围。
优化后的SQL示例
SELECT employee_id, -- 建议加上员工ID,方便对应到具体员工 payrate, checkdate, startdate FROM dbo.table WHERE -- 匹配入职90天左右的周度薪资记录 (checkdate BETWEEN DATEADD(day, 90, startdate) AND DATEADD(day, 97, startdate)) OR -- 匹配入职1年左右的周度薪资记录 (checkdate BETWEEN DATEADD(day, 365, startdate) AND DATEADD(day, 372, startdate))
额外说明
- 用
DATEADD函数计算目标日期比直接用+更规范,在不同数据库环境下兼容性更好(比如SQL Server里startdate + 90可行,但DATEADD是更通用的写法)。 - 如果你的薪资周有特定规则(比如固定每周一到周日),还可以进一步用日期函数精准匹配对应周的记录。比如要匹配入职90天所在的完整周,可以用
DATEPART(week, checkdate) = DATEPART(week, DATEADD(day,90,startdate)),但这种方式要注意跨年时的周数计算问题。
内容的提问来源于stack exchange,提问作者Christian Love
相关产品推荐
相关产品推荐

