编写SQL查询以查找接近min()值的行

时间:2013-08-28 20:28:16

标签: mysql sql min

我有大约5000行数据如下:

id    date        temperature     room 
--------------------------------------
0    2013-07-15   76              A
1    2013-08-15   72              A
2    2013-09-15   74              B
3    2013-02-15   71              B
4    2013-03-15   72              B
5    2013-04-15   70              A
...
...
...
5000 2013-08-01   68              A

我可以使用下面的查询来查找每个房间的最低温度。

  
    

从table_record逐个房间选择房间,最小(温度)。

  

现在,我需要找到每个房间接近最低温度的所有行。 我尝试在下面的同一个表上使用“join”,但它无法运行。

select t1.room, min(t1.temperature) from table_record t1 
  join on table_record t2 on 
            t2.room = t1.room and 
            t2.temperature * 0.95 (less_or_equal) min(t1.temperature)
  group by room

1 个答案:

答案 0 :(得分:2)

您需要分两步完成此操作。

SELECT
  *
FROM
(
  SELECT room, MIN(temperature) AS min_temp FROM TABLE_RECORD GROUP BY room
)
  AS ROOM_TEMP
INNER JOIN
  TABLE_RECORD
    ON  TABLE_RECORD.room         = ROOM_TEMP.room
    AND TABLE_RECORD.temperature <= ROOM_TEMP.min_temp / 0.95

如果你有(room, temperature)的索引,这应该很快。

另请注意,我使用x <= y / 0.95而不是x * 0.95 <= y。这是为了使查找更快(操纵搜索条件一次,而不是每行搜索的字段)