存储过程中按行累加分钟生成运行日期时间的实现需求
按工作时间规则计算工单的DATE和TIME字段
工单数据
| RUN | WORKORDER | LOCATION | TRAVELTIME | NUMEQUIP | TOT_TIME |
|---|---|---|---|---|---|
| NO99 | 1 | 起点 | |||
| NO99 | 2 | 客户1 | 112 | 1 | 8 |
| NO99 | 3 | 客户2 | 18 | 11 | 88 |
| NO99 | 4 | 客户3 | 22 | 93 | 744 |
| NO99 | 5 | 客户4 | 34 | 3 | 24 |
计算需求
- 需传入起始日期、起始时间作为参数,按
WORKORDER顺序逐行计算每行的DATE和TIME字段 - 时间计算逻辑:
- 累加
TRAVELTIME(客户间行程时间)与TOT_TIME(维护时间,公式为NUMEQUIP × 8分钟)
- 累加
- 工作时间规则:
- 若计算后的时间超过13:00,需额外加1小时
- 若计算后的时间超过18:00,需加15小时且日期加1天(例如客户3的744分钟维护时间跨3天)
当前实现的局限
现有SQL仅能实现连续时间累加,无法适配上述工作时间规则:
SELECT TBL1.RUN,TBL1.WORKORDER,TBL1.LOCATION, DATEADD(MI,TEMPTIME,'09:00') AS WORKORDERDATETIME FROM (SELECT RUN, WORKORDER, LOCATION, SUM(TRAVELTIME+TOT_TIME) OVER (ORDER BY WORKORDER) as TEMPTIME FROM MYTABLE WHERE RUN='NO99' )AS TBL1
期望解决方案
希望通过存储过程,采用逐行更新变量的方式实现完整的时间计算逻辑。
内容的提问来源于stack exchange,提问作者Nuno Marques
相关产品推荐
相关产品推荐

