我的表:寻找最高温度为某一天在SQL
hourly_weather electrical_readings
---------------- -----------------------
meter | time_read | temp meter | time | kwh
---------------- -----------------------
1 1316044800 55 1 1316136250 19.24
1 1316138400 56 1 1316044320 18.29
(...) (...)
我想从这个数据中检索两个重要参数:
1)我想对于一个给定
一天总KW2),我想这一天
我使用的查询最高温度需要WAYYYY太长时间运行,但我想不出另一种方式来做到这一点。就像两个表格中的100,000行数据一样。
SELECT * FROM (
SELECT * , SUM(kwh) AS sumkwh,
DATE(FROM_UNIXTIME(r.time_read)) AS datex,
UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(r.time_read))) AS datey,
(
SELECT MAX(temp)
FROM hourly_weather hw
WHERE hw.meter = 1
AND time_read >= datey
AND time_read < datey + 86400
) AS temp
FROM electrical_readings r
WHERE id = 1
GROUP BY datex
) as t1
WHERE t1.temp != '';
尝试运行没有外部查询选择;速度增益是多少?在我看来,它已经会提高你的表现。另一种解决方案可能是在那天后的cron期间存储这两天重要的值。那些价值不会改变(或者他们会)? – Luceos
删除外部选择对查询运行时几乎没有影响。 –
如果我删除子查询中的AND time_read> = datey子句,它将删除99%的运行时间。 –