Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL:Abrufen der Gesamtsumme als Unterauswahl sehr langsam

Anstatt nach all diesen Feldern zu gruppieren, ist eine einfachere (und schnellere) Lösung (von hier ) kann sein:

GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600

Ich kann mir nicht vorstellen, dass Ihre Abfrage die gewünschten Ergebnisse liefert (wenn ich Ihre Anforderungen richtig verstehe). Ich verstehe Ihre Anforderungen, da Sie, wenn es für eine bestimmte Stunde keine Zeilen gibt, die Summe aller Zeilen mit Stunde

Es gibt keine einfache und effiziente Möglichkeit, dies in MySQL zu tun, die ich kenne. Ich würde vorschlagen, eine temporäre Tabelle mit allen möglichen Gruppierungswerten in dem Bereich zu erstellen, den Sie betrachten (wahrscheinlich mit einer Schleife). Sie können diese Tabelle wahrscheinlich einige Jahre im Voraus einrichten und möglicherweise Zeilen nach Bedarf hinzufügen. Dann können Sie diesen Tisch und Ihren Tisch einfach links betreten.

Wenn Sie MSSQL verwenden, hätten Sie einen rekursiven CTE verwenden können, obwohl dies wahrscheinlich sehr langsam gewesen wäre. Sehen Sie sich dies an oder googeln Sie "mysql cte" nach MySQL-Alternativen. Der Weg, dies mit Rekursion zu tun, besteht darin, dieselbe Tabelle wiederholt für HOUR = HOUR+1 (links) zu verknüpfen bis Sie einen Nicht-NULL-Wert erhalten, dann stoppen Sie. Für jede davon berechnen Sie die Summe rückwärts.