質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

1回答

354閲覧

mysqlでのユーザー数の取得について

TaiseiMitomi

総合スコア13

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2018/11/08 10:25

編集2018/11/09 04:54

初心者です。
mysqlでまず、日毎に更新したユーザー数を取得し、1ヶ月間での更新したユーザー数をだそうとしています。
1ヶ月以内に日が変わってから同じユーザーが更新しても1とカウントします。
以下のコードなのですが、日が変わってから同じユーザーが更新した場合2にカウントしてしまい詰まっています、、、
sumの後にもdistinctをつけているのですが何がいけないんでしょうか、
よろしくお願いいたします。

SELECT active_user_summary.date AS date, active_user_summary.active_user_count AS ACTIVE_USER_COUNT FROM ( SELECT b1.date, sum(DISTINCT b2.active_user_count) AS active_user_count FROM ( SELECT calendar.date FROM ( SELECT @f:='2018-09-21' AS date UNION ALL SELECT @f:=DATE_ADD(@f, INTERVAL 1 DAY) FROM exhibits WHERE @f < DATE_ADD(NOW(), INTERVAL -1 DAY) ) AS calendar LEFT JOIN exhibits ON DATE(exhibits.created_at) = calendar.date GROUP BY calendar.date ) AS b1 INNER JOIN ( SELECT calendar.date, count(DISTINCT exhibits.user_id) AS active_user_count FROM ( SELECT @f:='2018-09-21' AS date UNION ALL SELECT @f:=DATE_ADD(@f, INTERVAL 1 DAY) FROM exhibits WHERE @f < DATE_ADD(NOW(), INTERVAL -1 DAY) ) AS calendar LEFT JOIN exhibits ON DATE(exhibits.created_at) = calendar.date GROUP BY calendar.date ) b2 ON DATE_ADD(b1.date, INTERVAL -30 DAY) <= b2.date AND b2.date <= b1.date GROUP BY b1.date ) AS active_user_summary

【追記】
このコードが求めたい結果まであといっぽぽいです。
わかるか方よろしくおねがいたします。

SELECT calendar.date, count(DISTINCT exhibits.user_id) AS active_user_count FROM ( SELECT @f:='2018-10-01' AS date UNION ALL SELECT @f:=DATE_ADD(@f, INTERVAL 1 DAY) FROM exhibits WHERE @f < DATE_ADD(NOW(), INTERVAL -1 DAY) ) AS calendar LEFT JOIN exhibits ON (calendar.date -30 DAY) <= DATE(exhibits.created_at) <= calendar.date where DATE_ADD(calendar.date, INTERVAL -30 DAY) <= DATE(exhibits.created_at) GROUP BY calendar.date

サンプルレコード
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

なんか冗長ですね。
1か月間を30日としていますけどいいんでしょうか。

以下で、求めたい結果にはならないでしょうか。

SQL

1select date_format(created_at, '%Y%m%d'), count(distinct user_id) 2from exhibits 3where date_format(created_at, '%Y%m%d') between cast('2018-09-21' AS date) and cast('2018-09-21' AS date) + interval 1 month 4group by date_format(created_at, '%Y%m%d')

投稿2018/11/08 11:46

sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaiseiMitomi

2018/11/09 03:06 編集

すみませんそれだと求めたい結果は得られないです。 毎日分値に変化がなくても取得したいです! 追記載せたのでぜひ見ていただけると嬉しいです、、
sazi

2018/11/09 04:20

成程、指定した日付から現在日までの連続した日付を基準にしようとしている訳ですね。 件数が意図しないものになっているのは、calendarとexhibitsの結合条件が不足しているからだと思われます。 質問に、exhibitsの定義とサンプルデータ、希望する結果を追記して貰えれば、具体的な回答ができると思います。
TaiseiMitomi

2018/11/09 04:50

exhibitsの定義とは何をお伝えすればよろしいでしょうか、どこから話せばいいかわからなくて、、、 exhibitsはユーザーが商品を出品するとレコードが追加されるかたちになっています。exhbitsの中にuser_idというカラムがありどのユーザーが出品したかわかるようになっています。そのuser_idをカウントしている次第です。redashで管理することになっています。 具体的に説明すると11/1の値は10/1〜10/31までの出品したユーザー数、11/2は10/2〜11/1までの出品したユーザー数、を取得したいです。同じユーザーが1ヶ月以内に何回出品していてもカウントは1としたいです。 こんな感じで大丈夫でしょうか、、、 レコードのサンプルのっけておきます!
TaiseiMitomi

2018/11/09 05:56

流石にこの説明だけじゃ厳しいですよね...
sazi

2018/11/09 13:58

定義はcreate文、サンプルはinsert文でお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問