探している結果を得るために、以前に提案された多くの方法を試しましたが、うまくいきませんでした。これで本当に新しい。過去に提案されたいくつかの例では、エラーの完全なギャンビットが発生します。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
これにより、泥よりも透明になることを願っています。支援に本当に感謝し、感謝します!!!