Mysql
 sql >> Database >  >> RDS >> Mysql

SQL:recupero della somma totale come sottoselezione molto lento

Piuttosto che raggruppare su tutti quei campi, una soluzione più semplice (e veloce) (da qui ) può essere:

GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600

Non riesco a immaginare che la tua query restituisca i risultati desiderati (se ho capito correttamente le tue esigenze). Comprendo le tue esigenze poiché, quando non ci sono righe per una determinata ora, desideri calcolare la somma di tutte le righe con ora

Non esiste un modo semplice ed efficiente per farlo in MySQL che conosco, suggerirei di creare una tabella temporanea con tutti i possibili valori di raggruppamento nell'intervallo che stai guardando (probabilmente con un ciclo). Probabilmente puoi impostare questa tabella in anticipo per alcuni anni ed eventualmente aggiungere righe secondo necessità. Quindi puoi semplicemente unirti a questo tavolo e al tuo tavolo.

Se stavi usando MSSQL, avresti potuto usare un CTE ricorsivo, anche se probabilmente sarebbe stato molto lento. Guarda questo o google "mysql cte" per alternative a MySQL. Il modo per farlo con la ricorsione è (a sinistra) unire ripetutamente sulla stessa tabella per HOUR = HOUR+1 finché non ottieni un valore non NULL, quindi fermati. Per ognuno di questi calcoli la somma a ritroso.