我需要你的帮助。我有两个表,第一个(传感器)有一个传感器列表和有关它们的信息,在第二个表(timegetdata)中有这些传感器采集的数据,并且有一段时间它发生。我需要选择传感器列表,有关它们的信息以及它们最后获取的数据。 我写了一个查询,但它工作不正确。
SELECT
timegetdata.idsensor,
sensors.type,
sensors.lng,
sensors.lat,
MAX(timegetdata.time) AS time,
timegetdata.carbon_monoxide,
timegetdata.ammonia,
timegetdata.alcohol,
timegetdata.benzene,
timegetdata.smoke,
timegetdata.propane,
timegetdata.butan,
timegetdata.methane,
timegetdata.formaldehyde,
timegetdata.acetone,
timegetdata.toluene
FROM sensors
INNER JOIN timegetdata
ON sensors.idsensor = timegetdata.idsensor
GROUP BY sensors.idsensor
答案 0 :(得分:0)
尝试在单独的子查询中计算timegetdata
表的最大时间,然后将该子查询称为sensors
表。此外,您需要再次加入timegetdata
以从该表中提取与每个idsensor
组的最大时间记录对应的其他列。
SELECT
s.idsensor,
s.type,
s.lng,
s.lat,
t1.time,
t2.carbon_monoxide,
t2.ammonia,
t2.alcohol,
t2.benzene,
t2.smoke,
t2.propane,
t2.butan,
t2.methane,
t2.formaldehyde,
t2.acetone,
t2.toluene
FROM sensors s
INNER JOIN
(
SELECT idsensor, MAX(time) AS time
FROM timegetdata
GROUP BY idsensor
) t1
ON s.idsensor = t1.idsensor
INNER JOIN timegetdata t2
ON t1.idsensor = t2.idsensor
答案 1 :(得分:0)
您的查询语法不正确,如果您需要显示其他列,则必须通过表达式将它们包含在组中。例如:
group by column1, column2, ..columnn
答案 2 :(得分:0)
您不是在寻找max()
。您正在寻找 last 行中的信息。这些是不同的。
select t.idsensor, s.type, s.lng, s.lat,
t.time, t.carbon_monoxide,
t.ammonia, t.alcohol,
t.benzene, t.smoke, t.propane,
t.butan, t.methane, t.formaldehyde,
t.acetone, t.toluene
from sensors s inner join
timegetdata t
on s.idsensor = t.idsensor
where t.time = (select max(t2.time)
from timegetdata t2
where t2.idsensor = t.idsensor
);
另请注意,编写和读取查询更容易,因为它使用表别名。