Mysql
 sql >> Base de données >  >> RDS >> Mysql

Récupérer la croissance record du total cumulé au fil du temps dans mysql

J'ai fini par utiliser une solution qui intègre des variables, basée sur une réponse Stack Overflow publiée ici . Cette solution semble être un peu plus flexible et efficace que les autres réponses fournies.

  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;

Notez que le groupe par, le formatage de la date et les exigences de plage sont simplement des spécificités de mon projet particulier. Une forme plus générique de cette solution (selon la question d'origine) serait :

  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;