2017-03-25 36 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

温度与其他表之间没有关系。我只是想根据它的时间戳从最新的条目中退出。谢谢 –

相关问题