如何计算具有下一个格式的表格的每个零件的操作小时数?
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