SQL Server Complex DateDiff方案

时间:2018-07-23 16:13:12

标签: sql sql-server datediff

这是我正在处理的当前表。我想记录站点(st)处于状态5的时间长度。

const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
    res.sendFile('../../website.html')
})

module.exports=router;

这是我想要的东西:

+-----+-----+-----+-----+---------------------+
| 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 |
+-----+-----+-----+-----+---------------------+

这可能是执行此操作的困难方式,因此我绝对愿意接受其他想法。我的最终目标是每天能够提出一个查询并汇总状态5的时间。我的问题是要从站上的时间戳及其各自的状态过渡到我可以操纵和使用的时间长度。我还可以添加一点,因为当工作站读取状态5时,这些数字会有一些变化,整个行将被数字5填充,这与行中被不同数字填充的其他数字不同。

如果每个间隔都有Datediff,我可以使用where子句将其缩小到状态5,这就是为什么在最终表中每个时间戳间隔都有datediff的原因。

任何帮助将不胜感激。谢谢。

编辑

下面的评论中有更多具体细节。

1 个答案:

答案 0 :(得分:2)

您可以使用lead()

select t.*,
       datediff(second, timestamp, lead(timestamp) over (order by timestamp)) as timediff
from t;