Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL:Recuperando a soma total como subseleção muito lenta


Em vez de agrupar em todos esses campos, uma solução mais simples (e rápida) (de aqui ) pode ser:
GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600

Não consigo imaginar que sua consulta retorne os resultados desejados (se entendi corretamente seus requisitos). Entendo seus requisitos, pois, quando não há linhas para uma determinada hora, você deseja calcular a soma de todas as linhas com hora
Não há uma maneira fácil e eficiente de fazer isso no MySQL que eu conheça, sugiro criar uma tabela temporária com todos os valores de agrupamento possíveis no intervalo que você está olhando (provavelmente com um loop). Você provavelmente pode configurar essa tabela antecipadamente por alguns anos e possivelmente adicionar linhas conforme necessário. Então você pode simplesmente juntar-se a esta mesa e à sua mesa.

Se você estivesse usando o MSSQL, poderia ter usado um CTE recursivo, embora isso provavelmente fosse muito lento. Veja este ou google "mysql cte" para alternativas ao MySQL. A maneira de fazer isso com recursão é juntar (à esquerda) na mesma tabela repetidamente para HOUR = HOUR+1 até obter um valor não NULL, então pare. Para cada um deles, você calculará a soma para trás.