计算记录每次出现的持续时间

时间:2018-03-07 08:31:07

标签: sql sql-server

我坚持目前的任务,并且不知道我将如何在这个特定情况下创建脚本。

Sample result set

我想要的是计算其中“等待”值的记录之间的持续时间。基本上计算它处于“等待”状态的时间。

现在状态可以一直改变,所以我只需要总计这些特定“等待”状态之间的持续时间。 (创建时间以蓝色突出显示)

我没有包含任何SQL脚本,因为数据是保密的,下面实际上是我创建的初始脚本的结果。

更难的是我需要为每张票计算它,所以下面的例子仅适用于ticket1。其他票号有“等待”的持续时间#。

我正在考虑创建一个临时表并分配一个标志来标识这些状态,然后循环访问特定故障单的每个结果集,然后将其存储在另一个结果表中。

如果您有任何我可以使用的建议或SQL功能,那就太棒了。非常感谢提前!

1 个答案:

答案 0 :(得分:1)

我设法提出以下解决方案。基本思想是自己加入你的表,使得对应于Waiting for组的两个记录汇集在一起​​。然后,我们只考虑两者之间的创作时间差异。

WITH cte AS (
    SELECT t1.Ticket, t1.[Create Time] AS wait_start, t2.[Create Time] AS wait_end,
        ROW_NUMBER() OVER (PARTITION BY t1.[Create Time] ORDER BY t2.[Create Time]) rn
    FROM yourTable t1
    INNER JOIN yourTable t2
        ON t1.Ticket = t2.Ticket AND
           t1.[New Value] = 'Waiting for' AND
           t2.[Old Value] = 'Waiting for' AND
           t1.[Create Time] < t2.[Create Time]
)

SELECT
    Ticket,
    wait_start,
    wait_end,
    DATEDIFF(day, wait_start, wait_end) wait_in_days
FROM cte
WHERE rn=1
ORDER BY wait_start;

enter image description here

Demo