mysql クエリに問題があり、誰かが助けてくれることを願っています。
次のテーブルがあります。
CREATE TABLE USER
(
ID VARCHAR(80) NOT NULL,
REGISTRATION_DATE DATE NOT NULL,
.....
PRIMARY KEY(ID)
);
CREATE TABLE INVOICES
(
USER_ID VARCHAR(80) NOT NULL,
INVOICE_NUMBER VARCHAR(50) NOT NULL,
CREATION_DATE DATE NOT NULL,
........
PRIMARY KEY(USER_ID, INVOICE_NUMBER),
FOREIGN KEY(USER_ID) REFERENCES USER(ID)
);
次の機能が必要です: クエリのパラメーターとして開始日と終了日 (期間) (例: 01.02.2013-31.05.2013) を選択し、表示したい:
- 選択した期間の各月の合計ユーザー数 (! は、1 か月あたりのユーザー数ではなく、その月まで (およびその月を含む) の合計ユーザー数)。
- この月に少なくとも 1 つの請求書を作成したユーザーの数 (これも毎月)。
- 各月の請求書の数 (ここでは 1 か月あたりの数)。
例: 期間: 01.02.2013-31.05.2013 結果セット:
Month | Year | Total count of users | Count of users who created at least one invoice in this month | Count of invoices in this month
Febr | 2013 | 20 | 12 | 45
March | 2013 | 20 | 4 | 22
April | 2013 | 23 | 20 | 30
May | 2013 | 28 | 27 | 69
そのようなクエリを書くことは可能ですか? 私はこれを試しました:
SELECT YEAR, MONTH, @VAR := @VAR + TOTS.COUNT AS USERS_TOTAL
FROM (
SELECT
YEAR(REGISTRATION_DATE) AS YEAR,
MONTH(REGISTRATION_DATE) AS MONTH,
COUNT(ID) AS COUNT
FROM USER
WHERE REGISTRATION_DATE <= '2013-05-31'
GROUP BY YEAR, MONTH
) AS TOTS, (SELECT @VAR := 0) AS INC
ユーザーの総数を取得しますが、新しい登録ユーザーがいる場合のみです。つまり、Ferb のユーザーの総数です。3 月は 20 日、4 月 21 日は 2 月です。- 20、3 月と 4 月の情報はありません 21、選択した期間から各月の情報が必要です。
このクエリを使用すると、少なくとも 1 つの請求書を作成したユーザーの数を取得できますが、その数が前月の数と同じである場合、情報はありません。
SELECT YEAR(CREATION_DATE) as YEAR, MONTH(CREATION_DATE) as MONTH,
COUNT(DISTINCT CUSTOMER_ID)
FROM INVOICES
WHERE CREATION_DATE >= '2013-02-01' AND CREATION_DATE <='2013-05-31'
GROUP BY YEAR, MONTH
このクエリを使用すると、選択した期間の各月の請求書の数を取得できます。
SELECT YEAR(CREATION_DATE) as YEAR, MONTH(CREATION_DATE) as MONTH, COUNT(INVOICE_NUMBER)
FROM INVOICES
WHERE CREATION_DATE >= '2013-02-01' AND CREATION_DATE <='2013-05-31'
GROUP BY YEAR, MONTH
これを単一のクエリで機能させたいのですが、前述のように、情報が前月と同じであっても、毎月の情報を取得したいと考えています。どうすれば私が望む結果を達成できますか、何かアイデアはありますか?