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

Agregacja MySQL według miesiąca z bieżącą sumą

Niestety, MySQL nie zapewnia funkcji analitycznych, takich jak Oracle i SQL Server.

Jednym ze sposobów na uzyskanie „suma bieżącej” jest użycie zmiennej użytkownika, mniej więcej tak:

  SELECT t.Date
       , t.NewUsers
       , @rt := @rt + t.NewUsers AS `Running Total`
    FROM (SELECT @rt := 0) i
    JOIN (
           SELECT DATE_FORMAT(created,'%Y%m%d') AS `Date`
                , COUNT(item_id) as `NewUsers`
             FROM AP_user
            WHERE YEAR(created) > 2011
              AND user_groups = '63655'
              AND user_active = 1
              AND userID NOT IN $excludedUsers
            GROUP BY DATE_FORMAT(created,'%Y-%m')
            ORDER BY DATE_FORMAT(created,'%Y-%m') ASC
         ) t

UWAGA:Zachowanie zmiennych pamięci, jak użyte powyżej, nie jest gwarantowane w tym kontekście. Ale jeśli będziemy ostrożni z zapytaniem, możemy uzyskać przewidywalne, powtarzalne wyniki w instrukcjach SELECT. Zachowanie zmiennych pamięci może się zmienić w przyszłej wersji, czyniąc to podejście niewykonalnym.

UWAGA:Zasadniczo umieściłem twoje zapytanie w nawiasach i nadałem mu alias jako widok wbudowany (co MySQL nazywa „tablicą pochodną”). Wprowadziłem kilka zmian w Twoim zapytaniu, Twoje GROUP BY ma potencjał do grupowania stycznia 2012 razem ze styczniem z 2013, zmieniłem to. Dodałem również klauzulę ORDER BY.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Złącze MySql EF6

  2. mysqldump z wieloma tabelami z klauzulą ​​where lub bez

  3. Sprawdź błędy zapytań kodu inicjatora zamiast pokazywać je użytkownikowi

  4. Podstawowe porównanie administracyjne między Oracle, MSSQL, MySQL, PostgreSQL

  5. Jak programowo ustawić max_connections w MySQL?