0

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

これにより、泥よりも透明になることを願っています。支援に本当に感謝し、感謝します!!!

4

1 に答える 1