计算更换部件的运行小时数



如何计算具有下一个格式的表格的每个零件的操作小时数?

MySQL 表

PART | DATE FAIL  | DATE REPLACE
A    | 2018-09-22 | 2018-10-03
B    | 2018-09-04 | 2018-09-17
B    | 2018-07-06 | 2018-08-26
C    | 2018-08-19 | 2018-10-10
C    | 2018-07-23 | 2018-08-15

我希望结果是这样的

PART | OPERATIONAL HOURS | EVALUATION RANGE
A    | 240               | 2018-10-03 to TODAY
B    | 624               | 2018-09-17 to TODAY
B    | 216               | 2018-08-26 to 2018-09-04
C    | 72                | 2018-10-10 to TODAY
C    | 96                | 2018-08-15 to 2018-08-19

示例

正如您在前面的数据中注意到的那样,例如,如果更换部件 B的日期是 2018-08-26,而部件在 2018-09-04 下一个失败,则应在结果表上生成类似于下一行的行:

PART | OPERATIONAL HOURS | EVALUATION RANGE
B    | 216               | 2018-08-26 to 2018-09-04

更重要的是,如果在替换日期之后没有失败日期,我们会计算从替换日期到现在或当前日期的操作小时

数 求求你,帮帮我。

你可以尝试这样的事情:

SELECT
t1.PART,
TIMESTAMPDIFF(
HOUR,
t1.DATE_REPLACE,
IFNULL(
(SELECT MIN(DATE_FAIL) FROM oper_hours WHERE DATE_FAIL > t1.DATE_REPLACE AND PART = t1.PART),
DATE(NOW())
)
) AS OPERATIONAL_HOURS,
CONCAT(
t1.DATE_REPLACE,
" to ",
IFNULL(
(SELECT MIN(DATE_FAIL) FROM oper_hours WHERE DATE_FAIL > t1.DATE_REPLACE AND PART = t1.PART),
DATE(NOW())
)
) AS EVALUATION_RANGE
FROM
oper_hours AS t1

你可以在这里看到这个工作的例子:http://www.sqlfiddle.com/#!9/b0cc9e/7/0

作为第二次尝试(更优雅(并且包括评估范围,您可以使用以下方法:

SELECT
t1.PART,
TIMESTAMPDIFF(HOUR, t1.DATE_REPLACE, IFNULL(MIN(t2.DATE_FAIL), DATE(NOW()))) AS OPERATIONAL_HOURS,
CONCAT(t1.DATE_REPLACE, " to ", IFNULL(MIN(t2.DATE_FAIL), DATE(NOW()))) AS EVALUATION_RANGE
FROM
oper_hours AS t1
LEFT JOIN
oper_hours AS t2 ON t2.PART = t1.PART AND t2.DATE_FAIL > t1.DATE_REPLACE
GROUP BY
t1.PART, t1.DATE_REPLACE
ORDER BY
t1.PART, t1.DATE_REPLACE DESC

这是我从之前对充满您的数据的测试数据库的查询中获得的 resulset:

PART  OPERATIONAL_HOURS  EVALUATION_RANGE   
A     240                2018-10-03 to 2018-10-13
B     624                2018-09-17 to 2018-10-13
B     216                2018-08-26 to 2018-09-04
C     72                 2018-10-10 to 2018-10-13
C     96                 2018-08-15 to 2018-08-19

这也是一个工作示例:http://www.sqlfiddle.com/#!9/b0cc9e/9

最新更新