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

3

我是一个有帮助的助手,可以为您进行翻译。以下是需要翻译的内容:

我正在努力组装正确的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

我真正想做的是选出给定控制器中每个传感器具有最大时间的所有行。因此,如果我想要控制器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" and controller = "A")
但我只能得到一个传感器(显然),而且我不确定如何获取我想要的内容。我几乎需要像for循环一样迭代每个sensor = *和controller = A,以找到最大时间,但我不知道如何实现。非常感谢您的反馈。
1个回答

2

一种方法是使用子查询将表格自连接:

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'

这个方法太棒了!感谢您,我的项目已经恢复运行了。不过我需要一段时间来理解它的工作原理。再次感谢! - snowman815

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接