1日の時間ごとにグループ化して、いくつかの行でいくつかの平均といくつかの合計をフェッチしようとしています。さらに、追加の列をフェッチしたいのですが、1時間ごとの合計を取得するのではなく(グループ化時にフェッチされます)、その特定の日付までのすべての行の合計をフェッチしたいのです。SQLステートメントは以下に掲載されています。
私の問題は、MySQL データベースで 25,000 行を超えるクエリを実行するのに約 8 秒かかることです (CPU i5/8GB RAM)。サブセレクト ( ... AS 'rain_sum'
) が非常に遅くなることがわかりました。私の質問は次のとおりです。私はあまりにも複雑な方法で考えていますか? 以下のクエリと同じ結果を得る簡単な方法はありますか?
SELECT
`timestamp_local` AS `date`,
AVG(`one`) AS `one_avg`,
AVG(`two`) AS `two_avg`,
SUM(`three`) AS `three_sum`,
(SELECT SUM(`b`.`three`)
FROM `table` AS `b`
WHERE `b`.`timestamp_local` <= SUBDATE(`a`.`timestamp_local`, INTERVAL -1 SECOND)
LIMIT 0,1) AS `three_sum`
FROM `table` AS `a`
GROUP BY
HOUR( `a`.`timestamp_local` ),
DAY( `a`.`timestamp_local` ),
MONTH( `a`.`timestamp_local` ),
WEEK( `a`.`timestamp_local` ),
YEAR( `a`.`timestamp_local` )
ORDER BY `a`.`timestamp_local` DESC
LIMIT 0, 24;