Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL:Pobieranie całkowitej sumy jako podselekcji bardzo wolno

Zamiast grupować we wszystkich tych polach, prostsze (i szybsze) rozwiązanie (od tutaj ) może być:

GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600

Nie wyobrażam sobie, aby Twoje zapytanie zwróciło oczekiwane wyniki (jeśli dobrze rozumiem Twoje wymagania). Rozumiem Twoje wymagania, ponieważ gdy nie ma wierszy dla danej godziny, chcesz obliczyć sumę wszystkich wierszy z godziną

Nie ma łatwego, wydajnego sposobu na zrobienie tego w MySQL, o którym wiem, sugerowałbym utworzenie tymczasowej tabeli ze wszystkimi możliwymi wartościami grupowania w zakresie, na który patrzysz (prawdopodobnie z pętlą). Prawdopodobnie możesz ustawić tę tabelę z wyprzedzeniem na kilka lat i ewentualnie dodać wiersze zgodnie z wymaganiami. Następnie możesz po prostu odejść do tego stołu i swojego stołu.

Gdybyś używał MSSQL, mógłbyś użyć rekurencyjnego CTE, choć prawdopodobnie byłoby to bardzo powolne. Spójrz na to lub google "mysql cte" dla alternatyw MySQL. Sposobem na zrobienie tego z rekurencją jest (po lewej) wielokrotne dołączanie do tej samej tabeli przez HOUR = HOUR+1 dopóki nie uzyskasz wartości innej niż NULL, a następnie zatrzymaj się. Dla każdego z nich obliczysz sumę wstecz.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak podłączyć wiele baz danych w PHP, MYSQLi i PDO

  2. 1030 Wystąpił błąd 28 z silnika pamięci masowej

  3. Tablica PDO SHOW TABLES

  4. Grails 3 - Gradle zależności Mysql Connector

  5. MySQL ALTER TABLE zajmuje dużo czasu na małym stole