我有大约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
答案 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
。这是为了使查找更快(操纵搜索条件一次,而不是每行搜索的字段)。