qq_37727187 2023-08-17 17:30 采纳率: 96%
浏览 11
已结题

sql sever 数据更新问题

sql sever当中有一组数据,如下图,如何让状态位正在执行的数据中最晚的计划完工时间的值更新为第一条状态为等待执行的数据的开工时间,然后通过公式 DATEADD(MINUTE, ROUND(ROUND( 数量 / 小时产能 ,2)*60, 0), 计划开工时间)算出完工时间,然后将剩余的等待执行的数据进行逻辑处理,处理逻辑为,按序号顺序将第一条的计划完工时间更新为下一条的计划开工时间,在用公式 DATEADD(MINUTE, ROUND(ROUND( 数量 / 小时产能 ,2)*60, 0), 计划开工时间)计算出计划完工时间,赋值给下下一条。以此类推

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-17 21:07
    关注

    【以下回答由 GPT 生成】

    解决方案

    根据问题描述,可以采用以下步骤来实现给定的逻辑:

    1. 更新状态为"正在执行"的数据中最晚的计划完工时间的值为状态为"等待执行"的第一条数据的开工时间。
    2. 使用公式 DATEADD(MINUTE, ROUND(ROUND( 数量 / 小时产能 ,2)*60, 0), 计划开工时间) 计算更新后的完工时间。
    3. 循环处理剩余的状态为"等待执行"的数据,按照序号顺序进行逻辑处理:
    4. 更新每一条数据的计划完工时间为下一条数据的计划开工时间。
    5. 使用公式 DATEADD(MINUTE, ROUND(ROUND( 数量 / 小时产能 ,2)*60, 0), 计划开工时间) 计算更新后的计划完工时间。
    6. 将更新后的计划完工时间赋值给下下一条数据。

    具体的SQL语句实现如下:

    -- 更新状态为"正在执行"的数据中最晚的计划完工时间的值为状态为"等待执行"的第一条数据的开工时间
    UPDATE YourTable
    SET 计划完工时间 = (SELECT 开工时间 FROM YourTable WHERE 状态 = '等待执行' ORDER BY 开工时间 ASC LIMIT 1)
    WHERE 状态 = '正在执行'
    AND 计划完工时间 = (SELECT MAX(计划完工时间) FROM YourTable WHERE 状态 = '正在执行')
    
    -- 使用公式计算更新后的完工时间
    UPDATE YourTable
    SET 完工时间 = DATEADD(MINUTE, ROUND(ROUND( 数量 / 小时产能 ,2)*60, 0), 计划开工时间)
    
    -- 循环处理剩余的状态为"等待执行"的数据
    DECLARE @NextPlanStartTime DATETIME
    DECLARE @NextPlanFinishTime DATETIME
    DECLARE @NextNextPlanFinishTime DATETIME
    
    -- 获取第一条数据
    SELECT TOP 1 @NextPlanStartTime = 计划开工时间, @NextNextPlanFinishTime = 计划完工时间
    FROM YourTable
    WHERE 状态 = '等待执行'
    ORDER BY 序号
    
    -- 循环处理剩余数据
    WHILE EXISTS(SELECT 1 FROM YourTable WHERE 状态 = '等待执行')
    BEGIN
      -- 更新计划完工时间为下一条数据的计划开工时间
      UPDATE YourTable
      SET 计划完工时间 = @NextPlanStartTime
      WHERE 序号 = (SELECT TOP 1 序号 FROM YourTable WHERE 状态 = '等待执行' ORDER BY 序号 ASC)
    
      -- 使用公式计算更新后的计划完工时间
      UPDATE YourTable
      SET 计划完工时间 = DATEADD(MINUTE, ROUND(ROUND( 数量 / 小时产能 ,2)*60, 0), 计划开工时间)
    
      -- 更新计划完工时间赋值给下下一条数据
      SELECT TOP 1 @NextPlanStartTime = 计划开工时间, @NextNextPlanFinishTime = 计划完工时间
      FROM YourTable
      WHERE 状态 = '等待执行' AND 计划完工时间 > @NextPlanStartTime
      ORDER BY 序号
    END
    

    上述SQL语句将按照问题描述的逻辑,逐步更新数据。请将代码中的 YourTable 替换为实际表名,并将 数量小时产能状态计划开工时间计划完工时间完工时间开工时间序号 替换为实际的字段名。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月6日
  • 已采纳回答 8月29日
  • 创建了问题 8月17日

悬赏问题

  • ¥15 宝塔ssl证书一直待待验证
  • ¥15 相近语义 不同表达 匹配
  • ¥15 [vasp+phonopy]表面模型的间隙扩散系数中尝试频率如何用声子频率计算
  • ¥15 现在新建了一个f1的就不行了包括所有新建的项目都无法生成,路径命名都没问题,keil和cubemx重装过还是不行,如何解决?(标签-java|关键词-固件)
  • ¥15 web前端开发怎么实现像图片这样的页面啊?
  • ¥15 ubuntu 20.04 网卡启用后,只有ipv6 没有 ipv4 无法上网
  • ¥15 QT任务管理器无法正确获取展开,有悬赏15元速求,如何解决?(相关搜索:标识符|结构体)
  • ¥15 使用delphi 10.3+intraweb 生成的页面怎么实现自动滚屏
  • ¥20 思科:Router c3600 MN-4E插槽
  • ¥15 16进制修改视频的元数据