2017-03-25 10 views
0

テーブルの温度、ルール、スケジュールから統計テーブルに特定の行をコピーしたいと思います。温度テーブルで複数のテーブルからSQLの別のテーブルに特定の行をコピー

、私はルールテーブルで18.6

mysql> SELECT * FROM currenttemp ORDER BY `timestamp` DESC limit 10 ; 
+---------------------+-----------------+-------------+----------+----------+ 
| timestamp   | sensor   | currenttemp | humidity | pressure | 
+---------------------+-----------------+-------------+----------+----------+ 
| 2017-03-25 15:28:03 | sensor-1stFloor |  18.6 | 49.85 | 1021.26 | 
| 2017-03-25 15:27:03 | sensor-1stFloor |  18.7 | 49.81 | 1021.26 | 
| 2017-03-25 15:26:03 | sensor-1stFloor |  18.8 | 49.82 | 1021.26 | 
| 2017-03-25 15:25:03 | sensor-1stFloor |  18.9 | 49.85 | 1021.22 | 
| 2017-03-25 15:24:03 | sensor-1stFloor |  18.99 | 49.83 | 1021.21 | 
| 2017-03-25 15:23:03 | sensor-1stFloor |  18.61 | 49.85 | 1021.18 | 
| 2017-03-25 15:22:02 | sensor-1stFloor |  18.62 |  49.8 | 1021.3 | 
| 2017-03-25 15:21:02 | sensor-1stFloor |  18.63 | 49.82 | 1021.39 | 
| 2017-03-25 15:20:03 | sensor-1stFloor |  18.61 | 49.82 | 1021.28 | 
| 2017-03-25 15:19:03 | sensor-1stFloor |  18.62 | 49.82 | 1021.37 | 
+---------------------+-----------------+-------------+----------+----------+ 

で最新の温度をしたい、私はスケジュール表には40

mysql> SELECT * FROM rules limit 10 ; 
+----+----------+--------+------------+ 
| id | schedule | sensor | targettemp | 
+----+----------+--------+------------+ 
| 1 |  4 | 1  |   40 | 
| 2 |  5 | 1  |   5 | 
+----+----------+--------+------------+ 

でスケジュール4用targettempをしたい、私が欲しいですid 4の終了時間は10:00:00です。

mysql> SELECT * FROM schedules limit 10 ; 
+----+--------------+-----------+--------------+-----------+----------+---------+------------+--------+ 
| id | friendlyname | dayofweek | pretimestart | timestart | endtime | enabled | targettemp | sensor | 
+----+--------------+-----------+--------------+-----------+----------+---------+------------+--------+ 
| 4 | test   | 1111110 | 00:00:00  | 00:00:00 | 10:00:00 |  1 |   30 | 1  | 
| 5 | sun   | 0000001 | 00:00:00  | 00:00:00 | 20:00:00 |  0 |   0 |  | 
+----+--------------+-----------+--------------+-----------+----------+---------+------------+--------+ 

これらのデータを挿入します10時00分00秒

タイムスタンプが
状態の間で自動的に実行されているID 4 40
終了時刻でスケジュール4 18.6
targettempある統計表に

currenttemp ONとOFF

上記のテーブルからコピーされたデータの例として、statsテーブルの第1行を見てください。

mysql> SELECT * FROM stats limit 10 ; 
+---------------------+-------------+------------+----------+-------+ 
| timestamp   | currenttemp | targettemp | endtime | state | 
+---------------------+-------------+------------+----------+-------+ 
| 2017-03-25 15:41:46 |  18.6 |   40 | 10:00:00 | OFF | 
| 2017-03-19 16:53:05 |  16.83 |   5 | 00:00:00 | OFF | 
| 2017-03-19 16:54:14 |  16.83 |   40 | 00:00:00 | ON | 
| 2017-03-19 20:04:07 |  16.58 |   40 | 00:00:00 | ON | 
| 2017-03-19 20:04:15 |  16.58 |   5 | 00:00:00 | OFF | 
| 2017-03-19 20:06:29 |  16.58 |   5 | 00:00:00 | OFF | 
| 2017-03-19 20:34:28 |  16.54 |   5 | 00:00:00 | OFF | 
| 2017-03-19 20:34:56 |  16.54 |   5 | 00:00:00 | OFF | 
| 2017-03-19 20:35:26 |  16.54 |   40 | 00:00:00 | ON | 
| 2017-03-19 20:38:05 |  16.54 |   40 | 00:00:00 | ON | 
+---------------------+-------------+------------+----------+-------+ 

2つのクエリがあります。 1つは状態OFFで、もう1つは状態ONです。

+0

(1)タグを私は私の統計表に今見ることができます

INSERT INTO stats (currenttemp,targettemp,endtime,state) SELECT temperature,r.targettemp,s.timeend,'OFF' FROM schedules s INNER JOIN rules r ON s.id = r.schedule INNER JOIN temperature WHERE timestamp = (SELECT MAX(timestamp) FROM temperature) AND s.id = 4 

動作しているようですあなたあなたが使っているデータベースの質問。 (2)データのレイアウトを表示する。それは不明です。 –

+0

イメージのアドレスをコードからハイパーリンクに変えることはできますか? – toonice

+0

質問にレイアウトとサンプルデータを*テキスト*として追加します。 –

答えて

0

これは

mysql> SELECT * FROM stats limit 10 ; 
+---------------------+-------------+------------+----------+-------+ 
| timestamp   | currenttemp | targettemp | endtime | state | 
+---------------------+-------------+------------+----------+-------+ 
| 2017-04-06 17:58:05 |  19.53 |   40 | 10:00:00 | OFF | 
+---------------------+-------------+------------+----------+-------+ 
0

temperatureと他の表との関係が不明なため、ご質問が不明です。 schedulesへの参加キーがあるとします。もしそうなら、あなたが望むクエリは次のようになります:

INSERT INTO stats (currenttemp, targettemp, endtime) 
    SELECT t.temperature, r.targettemp, s.timeend 
    FROM schedules s INNER JOIN 
     rules r 
     ON s.id = r.schedule INNER JOIN 
     temperature t 
     ON t.schedule = s.id 
    WHERE s.id = 4 AND 
      t.timestamp = (SELECT MAX(t2.timestamp) 
         FROM temperature t2 
         WHERE t2.schedule = t.schedule 
         ); 
+0

温度と他のテーブルとの間には関係がありません。私はちょうどそのタイムスタンプに基づいて最新のエントリーを温度から引き出したいと思う。ありがとう –

関連する問題