You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单日存在两次变更时更新DateFrom与DateTo间的行?

问题:处理员工历史表单日多变更的关联更新

业务背景

  • 从#tmpEmployeeHistory、#PayrollHistory、#ContractHistory三张历史表采集数据到#tmpFinalChangeSet:只要任意一张表存在变更记录,就将PersonId和变更日期(对应历史表的DATE_FROM字段)插入目标表。
  • 数据采集完成后,需要从三张历史表补充#tmpFinalChangeSet的字段信息,比如从EmployeeHistory取StatusId、从PayrollHistory取GrossIncome、从ContractHistory取ContractID,以此明确每个时间点(ChangeDate)对应的人员状态及相关信息。
  • 只有#EmployeeHistory会出现同一PersonId单日多次变更的情况,因此新增DaySeqNum字段记录当日变更顺序,两次变更都需要插入#tmpFinalChangeSet(因为对应的StatusId不同)。

#EmployeeHistory 数据示例

PersonIdDate_FromDateToDaySeqNumStatusId
12018-06-012018-12-1611
12018-12-172018-12-1711
12018-12-172019-04-3025
12019-05-012019-07-3111

预期结果集

IdPersonIdChangeDateDaySeqNumStatusId
112018-06-1611
212018-12-1711
312018-12-1725
412019-01-0115
512019-05-0111

现有问题与需求

尝试用以下UPDATE语句填充#tmpFinalChangeSet的StatusId字段,但执行后第4行(ChangeDate为2019-01-01)的StatusId为空:

UPDATE t SET
    t.StatusId = eh.StatusId 
FROM #tmpFinalChangeset t
JOIN #tmpEmployementHistory eh ON EH.PERSON_ID = T.PersonId 
    AND T.ChangeDate >= EH.DATE_FROM
    AND T.ChangeDate <= ISNULL(EH.DATE_TO, '99991231') 
    AND EH.DaySeqNum = T.DaySeqNum 

添加AND EH.DaySeqNum = T.DaySeqNum是为了避免ChangeDate为'2018-12-17'的两行都被设置为StatusId=1,但这一条件导致非单日变更的行(比如2019-01-01)无法匹配到对应的历史记录(因为该行DaySeqNum=1,而历史表中覆盖2019-01-01的记录DaySeqNum=2)。

需要实现的目标:为#tmpFinalChangeSet的每行唯一匹配#EmployeeHistory中日期区间覆盖该行ChangeDate的记录,但单日多次变更的场景无法直接用日期区间关联。目前已通过两次独立UPDATE解决问题(第一次不添加DaySeqNum匹配条件,第二次添加该条件修正DaySeqNum=2的行),但希望找到更优的解决方案(比如给DaySeqNum=2的ChangeDate增加1秒来实现唯一标识)。

内容的提问来源于stack exchange,提问作者Marian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:10:35