我试图在几行中获取一些平均值和一些总和,按一天中的每个小时分组。另外,我想获取一个额外的列,其中我没有得到每个小时的总和(在分组时获取),但是我想在该特定日期之前获取所有行的总和。SQL 语句发布在下面。
我现在的问题是,在 MySQL 数据库上执行超过 25k 行的查询大约需要 8 秒(CPU i5/8GB RAM)。我发现 subselect ( ... 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;