3

ユーザーを追跡するテーブルを持つ Drupal サイトがあります。私がやりたいことは、経時的なメンバーシップの成長をグラフ化することです。だから私は、次のようなものを返すようにmysqlをマッサージしたい:

date | # of users (total who have registered up to the given date)
1/1/2014 | 0
1/2/2014 | 2
1/3/2014 | 10

ここで、'# of users' は、指定された日付までにアカウントを登録したユーザーの総数 (現在までの合計) であり、その特定の日に登録したユーザーの数ではありません(取得するのは簡単です)。

{users}私のテーブルの各行には、uid列、name列、およびcreated(タイムスタンプ) 列があります。

{users}したがって、私のテーブルのサンプル レコードは次のようになります。

name: John Smith
uid: 526
created: 1365844220
4

3 に答える 3

5

試す:

select u.created, count(*)
from (select distinct date(created) created from `users`) u
join `users` u2 on u.created >= date(u2.created)
group by u.created

ここでSQLFiddle 。

于 2013-04-13T09:30:12.913 に答える
3

ここに投稿されたスタックオーバーフローの回答に基づいて、変数を組み込んだソリューションを使用することになりました。このソリューションは、提供された他の回答よりも少し柔軟で効率的であるようです。

  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;

グループ化、日付の書式設定、および範囲の要件は、単に特定のプロジェクトの仕様であることに注意してください。このソリューションのより一般的な形式 (元の質問による) は次のようになります。

  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;
于 2013-04-14T11:36:08.557 に答える
0

テーブル構造がわからないので、必要に応じてクエリを調整してください

SELECT DATE(created), COUNT(*) AS Users FROM users GROUP BY DATE(created)

登録ユーザーが追加された日付のみを表示したい場合

HAVING COUNT(*) > 0

クエリの最後

于 2013-04-11T14:34:25.130 に答える