这是我正在处理的当前表。我想记录电台(st(处于状态5的时间长度。
+-----+-----+-----+-----+---------------------+
| st1 | st2 | st3 | st4 | TimeStamp |
+-----+-----+-----+-----+---------------------+
| 3 | 3 | 3 | 3 | 2018-07-23 07:51:06 |
+-----+-----+-----+-----+---------------------+
| 5 | 5 | 5 | 5 | 2018-07-23 07:50:00 |
+-----+-----+-----+-----+---------------------+
| 0 | 0 | 10 | 10 | 2018-07-23 07:47:19 |
+-----+-----+-----+-----+---------------------+
| 5 | 5 | 5 | 5 | 2018-07-23 07:39:07 |
+-----+-----+-----+-----+---------------------+
| 3 | 3 | 10 | 10 | 2018-07-23 07:37:48 |
+-----+-----+-----+-----+---------------------+
| 3 | 3 | 10 | 10 | 2018-07-23 07:37:16 |
+-----+-----+-----+-----+---------------------+
这是关于我想要的:
+-----+-----+-----+-----+---------------------+----------+
| st1 | st2 | st3 | st4 | TimeStamp | TimeDiff |
+-----+-----+-----+-----+---------------------+----------+
| 5 | 5 | 5 | 5 | 2018-07-23 07:50:00 | 66 |
+-----+-----+-----+-----+---------------------+----------+
| 5 | 5 | 5 | 5 | 2018-07-23 07:39:07 | 492 |
+-----+-----+-----+-----+---------------------+----------+
这可能是一种很难做到的方式,所以我肯定对其他想法持开放态度。我的最终目标是能够提取一个查询,并每天对状态5的时间求和。我的问题是从工作站上的时间戳和它们各自的状态获取一个我可以操作和处理的时间长度。我还可以补充一点,因为当一个站读取状态5时,这些数字会有一些变化,所以整行都会用数字5填充,而不像其他数字那样用不同的数字填充。
如果我有每个间隔的Datediff,我可以使用where子句将其缩小到状态5,所以这就是为什么我在最后一个表中有每个时间戳间隔的Datediff。
如有任何帮助,我们将不胜感激。非常感谢。
编辑
更多具体细节请参阅下面的评论。
您可以使用lead()
:
select t.*,
datediff(second, timestamp, lead(timestamp) over (order by timestamp)) as timediff
from t;