[英]Select last distinct records where table1.column1 = table2.column2
I have two tables from the same database:我有来自同一个数据库的两个表:
Table READINGS:表读数:
Table SENSORS:表传感器:
I'm trying to create a query that will return, for each sensor registered in SENSORS, it's last row registered in READINGS.我正在尝试创建一个查询,该查询将返回,对于在 SENSORS 中注册的每个传感器,它是在 READINGS 中注册的最后一行。 Note that the same sensor can have many registers in READINGS, but ONLY ONE in SENSORS.
请注意,同一个传感器在 READINGS 中可以有多个寄存器,但在 SENSORS 中只有一个。
The result should be something like:结果应该是这样的:
Dump of the database: https://dl.dropboxusercontent.com/u/85576999/redeSensores.sql数据库转储: https : //dl.dropboxusercontent.com/u/85576999/redeSensores.sql
http://sqlfiddle.com/#!9/95818/5 http://sqlfiddle.com/#!9/95818/5
SELECT readings.*
FROM readings
INNER JOIN sensors
ON sensors.idSensor = readings.sensorid
LEFT JOIN readings r
ON r.sensorid = readings.sensorid
AND r.`datetime` > readings.`datetime`
WHERE r.id IS NULL
Or if you need info from both tables:或者,如果您需要来自两个表的信息:
http://sqlfiddle.com/#!9/95818/6 http://sqlfiddle.com/#!9/95818/6
SELECT readings.*,
sensors.*
FROM readings
INNER JOIN sensors
ON sensors.idSensor = readings.sensorid
LEFT JOIN readings r
ON r.sensorid = readings.sensorid
AND r.`datetime` > readings.`datetime`
WHERE r.id IS NULL
UPDATE AVG last day最后一天更新平均值
http://sqlfiddle.com/#!9/95818/10 http://sqlfiddle.com/#!9/95818/10
SELECT t.*,
AVG(r_avg.temperature),
AVG(r_avg.pollution),
AVG(r_avg.noise),
AVG(r_avg.humidity)
FROM (SELECT readings.*, sensors.*
FROM readings
INNER JOIN sensors
ON sensors.idSensor = readings.sensorid
LEFT JOIN readings r
ON r.sensorid = readings.sensorid
AND r.`datetime` > readings.`datetime`
WHERE r.id IS NULL
) t
LEFT JOIN readings r_avg
ON t.sensorid = r_avg.sensorid
AND r_avg.`datetime` >= DATE_ADD(t.datetime,INTERVAL -1 DAY)
GROUP BY t.id;
UPDATE 2 To filter aggregated records you can use HAVING
:更新 2要过滤聚合记录,您可以使用
HAVING
:
http://sqlfiddle.com/#!9/95818/11 http://sqlfiddle.com/#!9/95818/11
HAVING AVG(r_avg.temperature)!=42
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.