EDIT。我错过了我遇到的一个主要问题。我想显示所有唯一的'device_MAC'行。所以我希望这个查询输出3行(根据原始查询)。我遇到的问题是通过data
= remote_node
将dt_short
表格与rn_short
表格相关联,其中dt_short
的最大时间戳位于data
} table。
我在3个表上运行查询时遇到问题(2个表有多对多关系)。
我想做什么:
rn_IEEE
表中获取每个不同的remotenodes
(在示例中,这将获得3行,其中包含3个不同的短地址rn_short
)devicenames
表格
dt_short
表中获取每个不同的data
dt_short
rn_short
醇>
现在我遇到的问题是我可以单独对上面的查询进行查询,我甚至将它们中的前3个一起放入查询中但我似乎无法正确加入最后一点数据来获取结果我想要。
我一直在试图解决这个问题。这是一个指向SQL Fiddle的链接,其中包含所有测试数据和查询,就我所知,它在第一行执行我想要的但在第一行之后从表'data'执行:
答案 0 :(得分:2)
在完成您的要求和数据后,您似乎只需更改查询以在INNER JOIN
表格中包含data
而不是LEFT JOIN
select rn.*, dn.*, d.*
from remotenodes rn
inner join devicenames dn
on rn.rn_IEEE = dn.device_IEEE
and rn.rn_timestamp = (SELECT MAX(rn_timestamp) FROM remotenodes
WHERE rn.rn_IEEE = rn_IEEE
GROUP BY rn_IEEE)
inner join data d
on rn.rn_short = d.dt_short
AND d.dt_timestamp = (SELECT MAX(d2.dt_timestamp) AS ts
FROM data d2
WHERE d.dt_short = d2.dt_short
GROUP BY d2.dt_short)
答案 1 :(得分:0)
尝试这个查询,对我来说它返回一行:
SELECT rn_short, rn_IEEE, device_name
FROM
(SELECT DISTINCTROW dt_short FROM (SELECT * FROM `data` ORDER BY `dt_timestamp` DESC) as data ) as a
JOIN
(SELECT rn_IEEE, rn_short, device_name FROM devicenames dn JOIN (SELECT DISTINCTROW rn_IEEE, rn_short FROM (SELECT * FROM `remotenodes` ORDER BY `rn_timestamp` DESC) as remotenodes GROUP BY rn_IEEE) as rn ON dn.device_IEEE = rn.rn_IEEE) as b
ON a.dt_short = b.rn_short
答案 2 :(得分:0)
你在SQL小提琴中做了什么查询是对的。而不是使用左连接使用内连接,这样它就会给你第一行
欢呼声。
答案 3 :(得分:0)
感谢大家的所有答案。我设法通过使用视图解决问题。 这不是最有效的方式,但我认为它现在会做。 这是SQL Fiddle链接: