暦年(例えば、2016年)の月合計登録ユーザを取得しようとしています。クエリには、2015年12月までの以前の登録ユーザを考慮する必要があります。MySQLのフェッチ1ヶ月あたりの総登録ユーザ数
以下の2つの問題があります。 1.新規登録ユーザーがいない行をスキップします。 2.それは、登録済みのユーザーをフェッチします。また、合計ユーザー数をカウントすると、以前に登録されたユーザー数はカウントされません。
SELECT tots.*, @var := @var + tots.`monthlyUsers` as totalUsers
FROM (
SELECT m.monthNum,
YEAR(from_unixtime(u.createdDate)) AS `year`,
MONTH(from_unixtime(u.createdDate)) AS `month`,
COUNT(*) AS `monthlyUsers`
FROM user u
GROUP BY `year`, `month`) AS tots, (SELECT @var := 0) AS inc
この結果は
year month monthlyUsers totalUsers
------------------------------------
2015 1 2 2
2016 1 3 5
2016 10 1 6
2016 11 2 8
どのように私はこれらの2つの問題を克服しないようなものでしょうか?
EDIT は私が
SELECT tots.*, @var := @var + tots.`monthlyUsers` as totalUsers FROM (
SELECT
YEAR(from_unixtime(u.createdDate)) AS `year`,
MONTH(from_unixtime(u.createdDate)) AS `month`,
COUNT(*) AS `monthlyUsers`
FROM user u
where YEAR(from_unixtime(u.createdDate)) ='2016'
GROUP BY `year`, `month`) AS tots, (SELECT @var from (select @var :=count(u.id) from user u where year(from_unixtime(u.createdDate)) < '2016') as var) AS inc
これは私
year month monthlyUsers totalUsers
------------------------------------
2016 1 3 5
2016 10 1 6
2016 11 2 8
をフェッチする前年のレコードを取得し、現在の年のデータに追加し、管理しかし、私の予想結果は
ですyear month monthlyUsers totalUsers
------------------------------------
2016 1 3 5
2016 2 0 5
2016 3 0 5
2016 4 0 5
2016 5 0 5
2016 6 0 5
2016 7 0 5
2016 8 0 5
2016 9 0 5
2016 10 1 6
2016 11 2 8
2016 12 0 8
データ型と期待される結果のサンプルデータを追加できますか? DBMSについても言及する。 –
'months'テーブルはどのように見えますか? –
実際に私はそれを削除することを決めたすべての結果を私にフェッチしなかったので、月の数字で月のテーブルを作成しようとしました – gameOne