2

次のように、約5000行のデータがあります。

ID 日付 温度 部屋
--------------------------------------
0 2013-07-15 76 あ
1 2013-08-15 72 A
2 2013-09-15 74B
3 2013-02-15 71B
4 2013-03-15 72B
5 2013-04-15 70A
...
...
...
5000 2013-08-01 68 A

以下のクエリを使用して、各部屋の最低温度を見つけることができます。

部屋ごとに table_record グループから部屋、最小(温度) を選択します。

ここで、各部屋の最低温度に近いすべての行を見つける必要があります。以下と同じテーブルで「結合」を使用しようとしましたが、実行できません。

table_record t1 から t1.room, min(t1.temperature) を選択
  table_record t2 で結合
            t2.room = t1.room および
            t2.温度 * 0.95 (少ないか等しい) 分(t1.温度)
  部屋ごとにグループ化

4

1 に答える 1

2

これは 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。これは、ルックアップを高速化するためです(すべての行でフィールドを検索するのではなく、検索基準を 1 回操作します)

于 2013-08-28T20:38:12.527 に答える