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

MySQL samlet efter måned med løbende total

Desværre giver MySQL ikke analytiske funktioner, som Oracle og SQL Server gør.

En måde at få en "running total" er at gøre brug af en brugervariabel, noget som denne:

  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

BEMÆRK:Opførslen af ​​hukommelsesvariabler som brugt ovenfor er ikke garanteret i denne sammenhæng. Men hvis vi er forsigtige med forespørgslen, kan vi få forudsigelige, gentagelige resultater i SELECT-sætninger. Hukommelsesvariablernes adfærd kan ændre sig i en fremtidig udgivelse, hvilket gør denne tilgang ubrugelig.

BEMÆRK:Jeg har stort set pakket din forespørgsel i parentes og givet den et alias som en inline-visning (det MySQL kalder en "afledt tabel"). Jeg har lavet et par ændringer i din forespørgsel, din GROUP BY har potentiale til at gruppere januar 2012 sammen med januar fra 2013, det ændrede jeg. Jeg tilføjede også en ORDER BY-klausul.




  1. Hvordan indsætter man data i PostgreSQL med COPY-kommandoen?

  2. Ting du skal vide om FND_LOBS Table i Oracle Apps

  3. Lagring af foranstillede nuller af heltal i MySQL-database som INTEGER

  4. MySQL bruger ikke indekser (Using filesort) ved brug af ORDER BY