2017-03-25 72 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 | 
+---------------------+-----------------+-------------+----------+----------+ 

在規則表中的最新溫度,我想爲時間表4 targettemp其是40

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

在調度表,我想對於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 |  | 
+----+--------------+-----------+--------------+-----------+----------+---------+------------+--------+ 

然後我要插入這些DAT一到統計信息表

currenttemp是18.6
targettemp爲時間表4是40
結束時間爲ID 4是10:00:00

時間戳是自動完成的
狀態之間會ON和OFF

請看第一行中的統計信息表作爲例如由從上述表複製的數據。

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個查詢。一個狀態爲OFF,另一個狀態爲ON。

+0

(1)標籤的問題與你正在使用的數據庫。 (2)顯示數據的佈局。目前還不清楚。 –

+0

你可以把圖像的地址從代碼轉換爲超鏈接嗎? – toonice

+0

在問題中將佈局和示例數據添加爲* text *。 –

回答

0

這似乎工作

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 

我現在可以看到我的統計表格

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

溫度與其他表之間沒有關係。我只是想根據它的時間戳從最新的條目中退出。謝謝 –

相關問題