sql >> Database >  >> RDS >> Mysql

Haal de totale recordgroei in de loop van de tijd op in mysql

Ik heb uiteindelijk een oplossing gebruikt die variabelen bevat, gebaseerd op een Stack Overflow-antwoord dat is gepost hier . Deze oplossing lijkt iets flexibeler en efficiënter te zijn dan andere gegeven antwoorden.

  SELECT u.date,
  @running_total := @running_total + u.count AS count
  FROM (
    SELECT COUNT(*) AS count, DATE_FORMAT(FROM_UNIXTIME(created), '%b %d %Y') AS date
    FROM {users}
    WHERE created >= :start_time AND created <= :end_time
    GROUP BY YEAR(FROM_UNIXTIME(created)), MONTH(FROM_UNIXTIME(created)), DAY(FROM_UNIXTIME(created))
  ) u
  JOIN (
    SELECT @running_total := u2.starting_total
    FROM (
      SELECT COUNT(*) as starting_total
      FROM {users}
      WHERE created < :start_time
    ) u2
  ) initialize;

Merk op dat de vereisten voor groeperen op, datumopmaak en bereik slechts specifieke kenmerken zijn van mijn specifieke project. Een meer algemene vorm van deze oplossing (volgens de oorspronkelijke vraag) zou zijn:

  SELECT u.date,
  @running_total := @running_total + u.count AS count
  FROM (
    SELECT COUNT(*) AS count, DATE(FROM_UNIXTIME(created)) AS date
    FROM {users}
    GROUP BY date
  ) u
  JOIN (
    SELECT @running_total := 0
  ) initialize;


  1. Tellen en groeperen van dezelfde benoemde kolom in verschillende tabellen (waarbij clausule uit slechts één tabel)

  2. Forceer in Postgresql uniek op combinatie van twee kolommen

  3. 5 tips om uw database veilig te houden

  4. Is er een manier om IP te matchen met IP+CIDR ​​rechtstreeks vanuit de SELECT-query?