Mysql-聚合函数查询分组问题

时间:2011-08-11 03:31:23

标签: mysql sql database aggregate-functions

考虑下表。


enter image description here


我正在尝试编写要显示的查询 - 每个类别的所有部件的最大值。还显示值为最大值的日期

所以我试过这个 -

select Part_id, Category, max(Value), Time_Captured
from data_table
where category = 'Temperature'
group by Part_id, Category

首先,mysql没有在group by中没有Time_Captured时抛出错误。 不确定它是否与mysql或我的 mysql有问题。

所以我认为它应该返回 -

1   Temperature 50  11-08-2011 08:00
2   Temperature 70  11-08-2011 09:00

但它返回了从数据集的第一条记录中捕获的时间,即11-08-2011 07:00

不知道我哪里出错了。有什么想法吗?

(注意:我在VM中运行它。万一它会改变任何东西)

1 个答案:

答案 0 :(得分:1)

您需要加入查找max(value)的查询结果,如下所示:

select dt.Part_id, dt.Category, dt.Value, dt.Time_Captured
from data_table dt
join (select Part_id, Category, max(Value) as Value
          from data_table group by 1, 2) x 
    on x.Part_id = dt.Part_id and x.Category = dt.Category
where dt.category = 'Temperature';

请注意,如果有多个行具有相同的最大值,则会返回多行。

如果你想将这个限制为一行,即使max(value)有多个匹配,选择max(Time_Captured)(或者你喜欢的最小值(Time_Captured)),如下所示:

select dt.Part_id, dt.Category, dt.Value, max(dt.Time_Captured) as Time_Captured
from data_table dt
join (select Part_id, Category, max(Value) as Value
          from data_table group by 1, 2) x 
    on x.Part_id = dt.Part_id and x.Category = dt.Category
where dt.category = 'Temperature'
group by 1, 2, 3;