【发布时间】:2020-06-30 21:00:42
【问题描述】:
我是 SQL Server 的新手(到目前为止 3 天的经验),我不知道如何在 excel 之外完成此操作,如果这很难解释,请见谅。
底部的表格示例:
我有一个表,其中包含每分钟的时间戳、零件计数器和错误代码。 我目前正在将零件计数合并为 15 分钟范围和该范围的总数,如下所示:
SELECT
DATEADD(MINUTE, (DATEDIFF(MINUTE, '20000101', DateTime) / 15) * 15, '20000101') as Date_Time,
MAX(Part_Count) - MIN(Part_Count) AS PartsMade
FROM
[SMP].[dbo].[33_TestImport]
WHERE
[DateTime] >= DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()) - 24, 0)
GROUP BY
DATEADD(MINUTE, (DATEDIFF(MINUTE, '20000101', DateTime) / 15) * 15, '20000101')
现在我正在尝试添加,再添加一行(暂时)。
PV_alarm 将变成一个数字,此时我想计算时间直到 part_count 增加,pv_alarm 可能会在它第一次触发和 part_count 再次增加之间发生多次变化。
所以:
- PV_alarm 自然为零
- PV_alarm 变为非零
- PV_alarm 多次更改,最终将为零
- 零件计数递增
为了更清楚:表格
DateTime Part_Count Alarm_Light PV_Alarm Runtime_M
-----------------------------------------------------------------------
2020-03-18 20:16:06.040 340946 0 0 127076
2020-03-18 20:17:06.040 340953 0 0 127077
2020-03-18 20:18:06.040 340960 0 0 127078
2020-03-18 20:19:06.040 340967 0 0 127079
2020-03-18 20:20:06.040 340973 0 0 127080
2020-03-18 20:21:06.040 340978 1 8 127081 <--- timer would start here
2020-03-18 20:22:06.040 340978 1 8 127081
2020-03-18 20:23:06.040 340978 1 8 127081
2020-03-18 20:24:06.040 340978 1 8 127081
2020-03-18 20:25:06.040 340978 1 8 127081
2020-03-18 20:26:06.040 340978 1 8 127081
2020-03-18 20:27:06.040 340978 1 8 127081
2020-03-18 20:28:06.040 340978 1 8 127081
2020-03-18 20:29:06.040 340978 1 8 127081
2020-03-18 20:30:06.040 340978 1 8 127081
2020-03-18 20:31:06.040 340978 1 8 127081
2020-03-18 20:32:06.040 340978 1 8 127081
2020-03-18 20:33:06.040 340978 1 8 127081
2020-03-18 20:34:06.040 340978 1 8 127081
2020-03-18 20:35:06.040 340978 1 8 127081
2020-03-18 20:36:06.040 340978 1 8 127081
2020-03-18 20:37:06.040 340978 1 8 127081
2020-03-18 20:38:06.040 340978 1 8 127081
2020-03-18 20:39:06.040 340978 1 8 127081
2020-03-18 20:40:06.040 340978 1 8 127081
2020-03-18 20:41:06.040 340978 1 8 127081
2020-03-18 20:42:06.040 340978 1 8 127081
2020-03-18 20:43:06.040 340978 1 8 127081
2020-03-18 20:44:06.040 340978 1 8 127081
2020-03-18 20:45:06.040 340978 1 8 127081
2020-03-18 20:46:06.040 340978 1 8 127081
2020-03-18 20:47:06.040 340978 1 8 127081
2020-03-18 20:48:06.040 340978 1 8 127081
2020-03-18 20:49:06.040 340978 1 8 127081
2020-03-18 20:50:06.040 340978 1 8 127081
2020-03-18 20:51:06.040 340978 1 8 127081
2020-03-18 20:52:06.040 340978 1 8 127081
2020-03-18 20:53:06.040 340978 1 8 127081
2020-03-18 20:54:06.040 340978 1 8 127081
2020-03-18 20:55:06.040 340978 1 8 127081
2020-03-18 20:56:06.040 340978 1 8 127081
2020-03-18 20:57:06.040 340978 1 8 127081
2020-03-18 20:58:06.040 340978 1 8 127081
2020-03-18 20:59:06.040 340978 1 8 127081
2020-03-18 21:00:06.040 340978 1 8 127081
2020-03-18 21:01:06.040 340978 1 8 127081
2020-03-18 21:02:06.040 340978 1 8 127081
2020-03-18 21:03:06.040 340978 1 8 127081
2020-03-18 21:04:06.040 340978 1 8 127081
2020-03-18 21:05:06.040 340978 1 8 127081
2020-03-18 21:06:06.040 340978 1 8 127081
2020-03-18 21:07:06.040 340978 1 8 127081
2020-03-18 21:08:06.040 340978 1 8 127081
2020-03-18 21:09:06.040 340978 1 8 127081
2020-03-18 21:10:06.040 340978 1 8 127081
2020-03-18 21:11:06.040 340978 1 8 127081
2020-03-18 21:12:06.040 340978 0 0 127081
2020-03-18 21:13:06.040 340978 0 0 127081
2020-03-18 21:14:06.040 340978 0 0 127081
2020-03-18 21:15:06.040 340978 0 0 127081
2020-03-18 21:16:06.040 340978 0 0 127081
2020-03-18 21:17:06.040 340978 0 0 127081
2020-03-18 21:18:06.040 340978 0 0 127081
2020-03-18 21:19:06.040 340978 0 0 127081
2020-03-18 21:20:06.040 340984 0 0 127082 <---- timer ends
结果应该是这样的,但如果它也必须是它自己的结果,我可以稍后与上面的选择结合起来
Date_Time PartsMade Downtime
2020-03-18 20:45:00.000 0
2020-03-18 21:00:00.000 0
2020-03-18 21:15:00.000 68 00:59:00
2020-03-18 21:30:00.000 97
【问题讨论】:
-
这看起来是个有趣的问题。请以表格文本的形式向我们展示您期望的结果。
-
我会将回复添加到主帖,因为我不知道如何在评论中格式化它
-
谢谢。为什么第三排的停机时间为 59 分钟?我希望停机时间分布在各个时间段中(因此 21 小时为 0 分钟,12 小时 15 为 15 分钟,依此类推)。
-
我想知道每个问题需要多长时间才能解决,而不是累计停机时间,不确定是否有更好的方法来解决这个问题
标签: sql sql-server sql-timestamp