MySQL:基于列搜索,另一列中的每个唯一值和最大时间

时间:2015-12-14 15:03:18

标签: mysql

我正在努力收集正确的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以找到最大时间但我不知道如何实现它。非常感谢您的反馈意见。

感谢阅读,

1 个答案:

答案 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'