【发布时间】:2020-02-08 18:21:36
【问题描述】:
我将传感器数据存储在 MySQL 表中。该表具有字段 id、timestamp、mac、temp 和湿度。
Id 是唯一的自增索引,时间戳是输入数据的时间,Mac 是传感器的 Mac 地址。
因此,对于每个时间戳的每个传感器,都会创建一个条目。如果所有传感器都在工作,则时间戳将相等,但可能是某些传感器无法访问。
我知道想在所有时间戳查询所有传感器的温度。对于 3 个传感器,我提出了以下建议:
SELECT a.timestamp, a.temp, b.temp, c.temp from `data` as a
inner join data as b on a.timestamp = b.timestamp
inner join data as c on a.timestamp = c.timestamp
where a.mac = 'xx:xz:xz:34:03:F0' and
b.mac = 'xz:xx:xx:34:C6:99' and
c.mac='xx:xx:xx:32:27:36' order by a.timestamp
样本数据:
INSERT INTO `data` (`id`, `mac`, `timestamp`, `temp`, `humidity`, `battery`) VALUES
(132, '58:2D:34:32:27:36', '2020-02-01 19:30:11', '23.2', '53.5', '0.0'),
(133, '58:2D:34:34:C6:99', '2020-02-01 19:30:11', '23.1', '51.4', '0.0'),
(134, '58:2D:34:34:03:F0', '2020-02-01 19:30:11', '24.1', '50.0', '0.0'),
(138, '58:2D:34:32:27:36', '2020-02-01 19:40:08', '23.2', '54.3', '0.0'),
(139, '58:2D:34:34:C6:99', '2020-02-01 19:40:08', '23.2', '51.6', '0.0'),
(140, '58:2D:34:34:03:F0', '2020-02-01 19:40:08', '24.1', '50.1', '0.0'),
(141, '58:2D:34:32:27:36', '2020-02-01 19:50:08', '23.3', '54.6', '0.0'),
(142, '58:2D:34:34:C6:99', '2020-02-01 19:50:08', '23.2', '51.4', '0.0'),
(143, '58:2D:34:34:03:F0', '2020-02-01 19:50:08', '24.0', '50.3', '0.0');
示例输出:
Timestamp. , Mac1, Mac2, Mac3
2020-02-01 19:30:08, 24.0, 23.2, 23.0
2020-02-01 19:40:08, 24.0, 23.1, 23.0
2020-02-01 19:50:12, 24.1, 23.1, 23.0
但我认为应该/可能有更有效的方法?
有什么想法吗?
谢谢
【问题讨论】:
-
能否提供一些示例数据和示例输出?
-
您似乎没有发布有效的查询(第二行中的错字)。也许您可以提供一些预期的输出来帮助澄清您在寻找什么。我的预感是您真正想要做的是 GROUP BY 时间戳并使用 GROUP_CONCAT 来获取该特定时间戳的各种传感器温度。在这种情况下,您的 WHERE 子句将更改为
where mac in ('mac1', 'mac2', ...)。
标签: mysql