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

SQL:Henter samlet sum som undervalg meget langsomt

I stedet for at gruppere på alle disse felter, en enklere (og hurtigere) løsning (fra her ) kan være:

GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600

Jeg kan ikke forestille mig, at din forespørgsel returnerer de resultater, du ønsker (hvis jeg forstår dine krav korrekt). Jeg forstår dine krav, da du, når der ikke er rækker i en given time, vil beregne summen af ​​alle rækker med time

Der er ingen nem og effektiv måde at gøre dette på i MySQL, som jeg kender til, jeg vil foreslå at oprette en midlertidig tabel med alle mulige grupperingsværdier i det område, du ser på (sandsynligvis med en loop). Du kan sikkert sætte denne tabel op på forhånd i et par år, og eventuelt tilføje rækker efter behov. Så kan du bare gå og slutte dig til dette bord og dit bord.

Hvis du brugte MSSQL, kunne du have brugt en rekursiv CTE, selvom dette sandsynligvis ville have været meget langsomt. Se på dette eller google "mysql cte" for MySQL-alternativer. Måden at gøre dette med rekursion på er at (venstre) slutte sig til den samme tabel gentagne gange i HOUR = HOUR+1 indtil du får en ikke-NULL værdi, så stop. For hver af disse vil du beregne summen baglæns.




  1. Oracle Express 11g undtagelse underligt

  2. Hvad er MySQL-databasemotorer?

  3. Mest effektive metode til at opdage kolonneændring i MS SQL Server

  4. MySQL group_concat med select inde i select