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

使用自动编号更新列:基于非连续工作日历计算任务完成日期

非连续工作日历下的任务完成日期计算方案

嘿,我来帮你搞定这个任务完成日期的计算问题!先理清楚咱们的核心需求:根据T2里的非连续工作日历,从指定的起始日期(6/1/2018)开始,给T1里的每个人数出对应剩余天数的工作日,把那个日期更新到他们的Complete字段里。

先明确数据情况

  • T1表:存储人员任务信息,字段包括Name(姓名)、DaysRemaining(剩余任务天数)、Complete(待更新的完成日期)
  • T2表:存储有效工作日,字段是Date(工作日日期),你提到的Count字段如果没有预设序号的话,咱们可以自己生成

核心思路

咱们需要先给T2里的工作日按从起始日期开始的先后顺序分配序号,然后每个人的剩余天数就对应这个序号值,找到对应的日期后更新T1即可。比如Joe剩余3天,就找序号为3的工作日,也就是6/10/2018,正好符合你的预期。

具体实现(以SQL为例)

第一步:给工作日生成顺序序号

先用CTE给T2的工作日按日期升序生成序号,确保从咱们指定的起始日期(6/1/2018)开始计数:

WITH RankedWorkdays AS (
    SELECT 
        Date,
        ROW_NUMBER() OVER (ORDER BY Date) AS DayRank
    FROM T2
    WHERE Date >= '2018-06-01' -- 限定从今日(6/1/2018)开始的工作日
)

执行这段后,T2里的日期会被标记为:

  • 6/1/2018 → DayRank=1
  • 6/8/2018 → DayRank=2
  • 6/10/2018 → DayRank=3
  • 6/15/2018 → DayRank=4

第二步:更新T1的完成日期

把T1里每个人的DaysRemaining和上面生成的DayRank关联,找到对应日期并更新:

UPDATE T1
SET Complete = (
    SELECT Date
    FROM RankedWorkdays
    WHERE DayRank = T1.DaysRemaining
)
WHERE EXISTS (
    SELECT 1 FROM RankedWorkdays WHERE DayRank = T1.DaysRemaining
);

这段语句会:

  • 给Joe更新Complete为6/10/2018(对应DayRank=3)
  • 给Mary更新Complete为6/8/2018(对应DayRank=2)
  • 同时用EXISTS过滤掉剩余天数超过可用工作日数量的记录,避免把Complete更新为NULL(如果有这种情况,你可以根据需求调整,比如用最后一个工作日填充或者抛出提示)

补充说明

如果T2里的Count字段本来就是按顺序预设好的序号,那可以直接用Count代替咱们生成的DayRank,不用再用ROW_NUMBER()啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:18:13