简体   繁体   English

选择最后一个不同的记录,其中 table1.column1 = table2.column2

[英]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.

相关问题 提取table1.column2的总和,其中table1.column1包含来自table2.column2的值 - Extract a sum of table1.column2 where table1.column1 contains value from table2.column2 mysql更新表设置column3,其中table1.column1像concat('%',table2.column2,'%') - mysql update table set column3 where table1.column1 like concat ('%',table2.column2,'%') 如何将table1.column1的值设置为table2.column2的平均值 - How to set value of table1.column1 to an average of table2.column2 SQL INNER JOIN ON table1.column1 = table2.column2或ON ..? - SQL INNER JOIN ON table1.column1 = table2.column2 OR ON ..? 从表1连接表2中选择id,table1.column1 + table2.column2作为总数。 如果table2.column2没有值怎么办? - select id, table1.column1 + table2.column2 as total from table1 join table2. what if table2.column2 has no value? [table1.column1=table2.column1] 和 [table1.column1=1 AND table2.column1=1] 之间的区别 - Difference between [table1.column1=table2.column1] and [table1.column1=1 AND table2.column1=1] MySQL从表的多列中选择不同的记录 - MySQL Select Distinct Records from more than one column of table MySQL的:选择表中不同的列? - mysql: select distinct column in table? 选择表中不同列的计数 - Select count of distinct column in table MySQL Select 将 A 列与 B 列存在的表不同,或者如果 B 列不存在,则基于 C 列的最新 - MySQL Select distinct column A from table where column B exists or if none with column B then latest based on column C
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM