sql - 如何从确认列表中计算提前期
问题描述
我有一张表格,其中确认通过工厂内的操作处理的零件。
| PartNumber | Plant | OperationNumber | ConfirmationDate | ConfirmationTime |
| PartA | Pl_A | 300 | 2021-01-28 | 13:33:20 |
| PartB | Pl_A | 300 | 2021-01-28 | 13:33:20 |
| PartA | Pl_A | 500 | 2021-01-29 | 14:33:20 |
| PartB | Pl_A | 500 | 2021-01-29 | 14:33:20 |
| PartA | Pl_A | 800 | 2021-01-30 | 15:33:20 |
| PartB | Pl_A | 800 | 2021-01-30 | 15:33:20 |
我要返回的是该条目的唯一标识符(零件编号、工厂、操作编号)以及确认日期时间和最后一个条目的确认日期时间之间的差异(小于那个的最高操作编号)。
期望的输出:
| PartNumber | Plant | OperationNumber | LeadTime | ConfirmationDateTime |
| PartA | Pl_A | 300 | NULL | 2021-01-28 13:33:20 |
| PartA | Pl_A | 500 | 0000-00-01 01:00:00 | 2021-01-29 14:33:20 |
| PartA | Pl_A | 800 | 0000-00-01 01:00:00 | 2021-01-30 15:33:20 |
| PartB | Pl_A | 300 | NULL | 2021-01-28 13:33:20 |
| PartB | Pl_A | 500 | 0000-00-01 01:00:00 | 2021-01-29 14:33:20 |
| PartB | Pl_A | 800 | 0000-00-01 01:00:00 | 2021-01-30 15:33:20 |
解决方案
SQL Server 没有时间跨度数据类型 - 因此处理查询以获取您的输出格式0000-00-01 01:00:00
需要使用函数 - 有一些示例很容易找到,因此将这部分留给您。
使用 LAG 函数获取基线信息
SELECT PartNumber,
Plant,
OperationNumber,
CAST(ConfirmationDate as datetime) + CAST(ConfirmationTime as datetime),
DATEDIFF(second, LAG(CAST(ConfirmationDate as datetime) + CAST(ConfirmationTime as datetime)) OVER (PARTITION BY PartNumber ORDER BY OperationNumber), (CAST(ConfirmationDate as datetime) + CAST(ConfirmationTime as datetime)))
FROM <your table>
推荐阅读
- build - 云构建因 contentPlacementError 而失败
- c# - 无法通过这些策略定位元素:By.id;OpenQA.Selenium.WebdriverTimeoutExceltpion:1 秒后超时
- amazon-web-services - 对单个项目的细粒度访问 - GetItem、DynamoDB Resolver AppSync
- php - 如何按降序使用for循环获取值
- java - 如何在上传到沙发库时附加到现有文档而不提前替换
- java - 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查
- javascript - PointerLockControls 中的相机灵敏度以匹配实际游戏
- java - 更改 TextMessage 中的 MessageHeader
- java - 尽管已在 xml 中初始化,但抱怨 BATCH_JOB_INSTANCE 的 Spring 批处理不存在
- amazon-web-services - 如何使用 AWS Glue 将存储在 S3 中的无标题、压缩、管道分隔的文件转换为镶木地板