【问题标题】:Calculate MTBF with SQL query使用 SQL 查询计算 MTBF
【发布时间】:2019-06-26 14:32:28
【问题描述】:

我正在尝试计算从故障开始到下一个(同一列)开始之间的预期平均时间 [MTBF]。

我已经在这里找到了一个类似的问题,但对我没有帮助。

我必须计算每一行(其他列)的失败列 ((n+1) - n) 中的日期之间的差异,将其转换为小时并将其除以间隔数以计算平均时间.

这是我的桌子:

|       Failure        |    Start_Repair      |    End_Of_Repair     | Line  | Piece  |
|----------------------|----------------------|----------------------|-------|--------|
| 2019-06-26 06:30:00  | 2019-06-26 10:40:00  | 2019-06-27 12:00:00  | A     | tube   |
| 2019-06-28 00:10:00  | 2019-06-28 02:40:00  | 2019-06-29 01:12:00  | A     | washer |
| 2019-06-30 10:10:00  | 2019-06-30 02:40:00  | 2019-07-01 00:37:00  | B     | bolt   |
| 2019-07-02 12:01:00  | 2019-07-02 14:24:00  | 2019-07-05 00:35:00  | B     | engine |

所以我必须在失败列上做出区别,第二减第一,第三减第二等等。全部除以计算的间隔(这是我从第 2 行第 1 行开始的第 1 行) .

这是我写的sql代码,不行……

SELECT ROW_NUMBER() over (ORDER BY t1.Line, t1.Failure ASC) AS 'Row',
(DATEDIFF(HOUR, T1.failure, T2.failure))/'Row' AS '[MTBF]'
From Test_Failure as t1, Test_Failure as t2
where t1.Failure < t2.Failure

错误: 将 varchar 值“Row”转换为数据类型 int 时转换失败。

结果应该会回来:

A = (41.6 + 198.96)/2 = 120 小时

B = (49.85 + 116.35)/2 = 83,1h

【问题讨论】:

    标签: sql-server tsql kpi


    【解决方案1】:

    如果我理解正确,您可以通过聚合来做到这一点:

    select line,
           datediff(hour, min(failure), max(failure)) / nullif(count(*) - 1, 0)
    from test_failure f
    group by line;
    

    也就是说,故障之间的平均时间是最近的故障减去最早的故障除以计数减一。

    【讨论】:

    • 这几乎是正确的......在示例中,A 有 2 行,B 有 2 行,所以最好做 max - min,但此时它们是 5 行每行我应该减去每一行。我应该从最后一个开始,然后到第一个获得差异小时数(5 行 4 行,4 行 3 行,3 行 -2 行,2 行 1 行),将它们相加并除以比计数少一。
    • @AlexMagic 。 . .没有。这适用于所有情况。根据算术规则,您将观察到 ((row3 - row2) + (row2 - row1)) 等于 (row3 - row1)。
    【解决方案2】:

    将 varchar 值“行”转换为数据类型时转换失败 诠释。

    您收到此错误是因为您在第一列别名周围加上了单引号,然后尝试在计算第二列时使用它。你不能那样做。

    这一行:

    (DATEDIFF(HOUR, T1.failure, T2.failure))/'Row' AS '[MTBF]'
    

    正在尝试将 DATEDIFF 结果(整数)除以单词“Row”(字符串)。你不能用一个词来除一个数字。

    不管怎样,即使你不使用单引号,你仍然can't use the alias of a column in another column's calculation.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多