我正在努力收集正确的MySQL声明,并希望听到来自堆栈交换社区的一些意见。
我有一张这样的表:
id | controller | sensor | data | time
1 | A | TEMP | 65 | 12:30
2 | A | SWITCH | 0 | 12:30
3 | A | TEMP | 66 | 12:31
4 | A | SWITCH | 1 | 12:31
5 | B | SWITCH | 1 | 12:31
6 | A | TEMP | 67 | 12:32
7 | A | SWITCH | 1 | 12:32
8 | B | SWITCH | 65 | 12:32
9 | A | TEMP | 68 | 12:33
10 | B | TEMP | 65 | 12:33
11 | A | SWITCH | 0 | 12:33
12 | B | TEMP | 65 | 12:34
13 | A | HUMID | 10 | 12:35
14 | B | HUMID | 10 | 12:35
我真正想要做的是从给定的控制器中为每个传感器选择具有MAX(时间)的所有行。因此,如果我想要控制器A,那么该表的结果将是:
9 | A | TEMP | 68 | 12:33
11 | A | SWITCH | 0 | 12:33
13 | A | HUMID | 10 | 12:35
每个传感器的一个项目,对于给定的控制器,该传感器的时间最长。
到目前为止,最好的陈述是:
SELECT * FROM table
WHERE time =(SELECT MAX(time)FROM table
WHERE sensor
=" TEMP"和controller
=&# 34; A&#34)
但是我只能得到一个传感器(显然),而且我不确定如何获得我想要的东西。我几乎需要类似for循环的东西来迭代每个sensor = * and controller = A
以找到最大时间但我不知道如何实现它。非常感谢您的反馈意见。
感谢阅读,
答案 0 :(得分:2)
一个选项是使用子查询join
将表恢复为自身:
select y.id, y.controller, y.sensor, y.data, y.time
from yourtable y join (
select controller, sensor, max(time) maxtime
from yourtable
group by controller, sensor
) t on y.controller = t.controller and
y.sensor = t.sensor and
y.time = t.maxtime
where y.controller = 'A'