使用SQL查询计算MTBF

时间:2019-06-26 14:32:28

标签: sql-server tsql kpi

我正在尝试计算从故障开始到下一个故障开始的平均时间(同一列)[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.1小时

2 个答案:

答案 0 :(得分:0)

如果我理解正确,则可以通过聚合来实现:

Data = pd.read_excel(filename)

也就是说,两次故障之间的平均时间是最近的一次故障减去最早的一次故障所得到的时间再减去该次数。

答案 1 :(得分:0)

  

将varchar值“ Row”转换为数据类型时,转换失败   

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

此行:

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

试图将DATEDIFF结果(一个整数)除以单词“ Row”(一个字符串)。您不能将数字除以单词。

对于它的价值,即使您不使用单引号,您仍然can't use the alias of a column in another column's calculation.