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

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

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

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

SQL

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

Q&A

解決済

1回答

682閲覧

累積値を追加させたい

aka222

総合スコア6

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

SQL

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

0グッド

0クリップ

投稿2020/07/11 02:47

累積値を追加させたい

SQLで課金発生数の月ごとの当月累積値と前月累積値の列を追加させたいのですが検索しても思うようにいかず悩んでおります。
ご教示頂きたくお願いします。

当月累積値 = 前月累積値 + 課金発生数
前月累積値 = 当月累積値 - (当月課金発生数 - 当月解約数)

該当のソースコード

SQL

1SELECT DATE_FORMAT(client_use_services.created_at, '%Y年%m月') AS '年月', 2 IFNULL(tbl1.cnt, 0) AS '課金', 3 IFNULL(tbl2.cnt, 0) AS '解約' 4 5FROM client_use_services 6 7 LEFT JOIN 8 ( 9 SELECT count(*) as cnt, DATE_FORMAT(billing_start_date, '%Y%m') as date 10 FROM client_use_services 11 LEFT JOIN clients ON clients.id = client_use_services.client_id 12 WHERE clients.client_type = 1 13 GROUP BY DATE_FORMAT(billing_start_date, '%Y%m') 14 ) as tbl1 15 ON 16 tbl1.date = DATE_FORMAT(client_use_services.created_at, '%Y%m') 17 18 LEFT JOIN 19 ( 20 SELECT count(*) as cnt, DATE_FORMAT(billing_end_date, '%Y%m') as date 21 FROM client_use_services 22 LEFT JOIN clients ON clients.id = client_use_services.client_id 23 WHERE clients.client_type = 1 24 AND billing_start_date IS NOT NULL 25 AND billing_end_date IS NOT NULL 26 GROUP BY DATE_FORMAT(billing_end_date, '%Y%m') 27 ) as tbl2 28 ON 29 tbl2.date = DATE_FORMAT(client_use_services.created_at, '%Y%m') 30 31GROUP BY DATE_FORMAT(client_use_services.created_at, '%Y年%m月'), 32 tbl1.cnt, 33 tbl2.cnt;

現在のテーブル

イメージ説明

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

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

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

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

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

sazi

2020/07/11 03:14

当月累積値 = 前月累積値 + 課金発生数 前月累積値 = 当月累積値 - (当月課金発生数 - 当月解約数) 上記の式だと当月累積値と前月累積値で循環していますけど?
aka222

2020/07/11 03:24

ご指摘ありがとうございます。そうですよね。ほかに算出方法が浮かばず悩んでおります。
sazi

2020/07/11 03:33

累積の範囲は無く、当該月までの累計ですか?
aka222

2020/07/11 03:45

はい。その月の値+前月までの累計値を表示させたいと考えております。
hihijiji

2020/07/11 04:01

SQLの前に課金、解約、累積値とはそれぞれ何なのかを、他の人に文書で正確に伝えられる状態にまで整理してみてください。 その過程で自己解決するかもしれないし、解決しなければ質問に追記してください。
aka222

2020/07/11 06:13

承知しました。整理いたします。
sazi

2020/07/11 06:37

billing_start_dateなど、どのテーブルの項目なのかSQLだけでは判断できないものがありますので、テーブルの定義も明確にして下さい。
Orlofsky

2020/07/11 08:18

DATE_FORMAT, IFNULL って Oracle Database にはない関数ですが、タグはあっていますか?
guest

回答1

0

自己解決

こちら抽出ができましたので自己解決とさせて頂きます。

投稿2020/07/18 08:50

aka222

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問