我已经尝试了许多以前建议的方法来获得我正在寻找的结果,但没有运气。在这方面真的很新。在过去建议的几个例子中,我得到了一整套错误。使用 MySQL Workbench 5.2 CE。这是我开始的表格和我希望结束的表格。只是寻找“状态”何时变为 <>0 直到它返回 0。
ndx status t_stamp machine_name
1 0 2013-09-06 05:45:24
2 0 2013-09-06 05:52:57 BM01
3 165 2013-09-06 06:09:36 BM01
4 0 2013-09-06 06:09:57 BM01
5 165 2013-09-06 06:16:55 BM01
6 0 2013-09-06 06:17:14 BM01
7 165 2013-09-06 07:54:08 BM01
8 0 2013-09-06 07:54:23 BM01
9 165 2013-09-06 08:08:52 BM01
10 13 2013-09-06 08:27:10 BM01
11 99 2013-09-06 08:31:52 BM01
12 84 2013-09-06 09:09:28 BM01
13 255 2013-09-06 09:19:29 BM01
14 0 2013-09-06 09:19:33 BM01
15 2 2013-09-06 09:29:17 BM01
16 3 2013-09-06 09:33:07 BM01
17 0 2013-09-06 09:33:08 BM01
一些对我来说似乎最好的建议是使用不同的 JOIN,但是当我尝试它们时,我得到了红色下划线错误。使用 concat 可以让我填充目标表但不正确。这是一个子查询,因为它需要执行几台机器。
CREATE DEFINER=`root`@`localhost` PROCEDURE `pro_report_machine_status2`(IN StartDate DATETIME,IN EndDate DATETIME, IN Machine VARCHAR(50))
BEGIN
SET @table_name = Machine;
SET @sql_text =
concat('Insert Into tbl_machine_status1
(machine_name,t_stamp)
Select machine_name,t_stamp,TIMESTAMPDIFF(second,ign_bm01_status1_ndx,ign_bm01_status1_ndx+1)
FROM ',@table_name,
' WHERE t_stamp >= "',StartDate,
'" AND t_stamp <= "',EndDate,
' AND status <> 0 '
'" Group By t_stamp asc;');
Prepare stmt From @sql_text;
Execute stmt;
Deallocate prepare stmt;
END
忘了添加实际的问题和结果表...soory
我想回到表中的是“停机时间”的数量,这将是机器不为零的时间量。因此,寻找显示评估 t_stamp(非零时的最小值)- t_stamp(返回零时的值)的代码。这会将时间值插入到每次出现的表中。
ndx downtime machine_name
1 00:00:21 bm01
2 00:00:19 bm01
3 00:00:15 bm01
4 01:10:41 bm01
5 00:03:51 bm01
希望这比泥浆更清楚。非常感谢您的帮助和感谢!!!