MySQL データベースに温度を保存しました。テーブルは と呼ばれtemperatures
ます。たとえば、列dtime
とが含まれていますtemperature
。最初のものは温度が測定された時間 (列の種類はDATETIME
) で、後者は明らかに温度 (種類はFLOAT
) です。
現在、次のクエリを使用して、特定の期間の気温を取得しています。
SELECT dtime, temperature
FROM temperatures
WHERE dtime BETWEEN "2012-11-15 00:00:00" AND "2012-11-30 23:59:59"
ORDER BY dtime DESC
その日の平均気温を結果に追加したいと思います。以下を試しました。
SELECT
dtime AS cPVM,
temperature,
(
SELECT AVG(temperature)
FROM temperatures
WHERE DATE(dtime) = DATE(cPVM)
) AS avg
FROM temperatures
WHERE dtime BETWEEN "2012-11-15 00:00:00" AND "2012-11-30 23:59:59"
ORDER BY dtime DESC
正常に動作しますが、これは本当に遅いです。その期間の結果のフェッチには約 5 秒かかりますが、最初の結果 (平均なし) は 0.03 秒で完了します。
SELECT DATE(dtime), AVG(temperature)
FROM temperatures
WHERE DATE(dtime) BETWEEN "2012-11-15" AND "2012-11-30"
GROUP BY DATE(dtime)
ORDER BY dtime DESC
ただし、これは 0.04 秒で完了します。
平均気温をより効率的に取得するにはどうすればよいですか?