2

我有大约 5000 行数据如下:

身份证日期温度室
--------------------------------------
0 2013-07-15 76 A
1 2013-08-15 72 A
2 2013-09-15 74 乙
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”,但它无法运行。

从 table_record t1 中选择 t1.room, min(t1.temperature)
  在 table_record t2 上加入
            t2.room = t1.room 和
            t2.temperature * 0.95 (less_or_equal) min(t1.temperature)
  按房间分组

4

1 回答 1

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. 这是为了使查找更快(操作一次搜索条件,而不是每行上的搜索字段)

于 2013-08-28T20:38:12.527 回答