2017-10-04 11 views
-3

私はバグメトリクスのレポートを作成しています。私はいくつかのカスタマイズされたテーブルが必要ですが、私のクエリは期待された出力を提供していません。MySQLでインクリメンタル変数をGROUP BYする方法

私のクエリは出力Current Outputを与えます。だから、私はのOustandingの値をプロジェクトごとにグループ化する必要がありますが、他のプロジェクトの値も計算しています。

**Current Output** 
********************************************* 
|Project | Opened | Resolved| Outstanding | 
********************************************* 
| A  | 1 | 0 | 1  | 
********************************************* 
| A  | 2 | 1 | 2  | 
********************************************* 
| A  | 1 | 2 | 1  | 
********************************************* 
| B  | 3 | 2 | 2  | 
********************************************* 
| B  | 2 | 1 | 3  | 
********************************************* 

私はExpected Outputのような出力が、卓越した値はプロジェクトごとに個別に計算する必要がありますしたいです。正確に言うと、のプロジェクト 'B'には、以前のプロジェクトの未処理値を追加しないように未処理の値のみが表示されます。 優れ

2)増分変数 - -

**Expected Output** 
********************************************* 
|Project | Opened | Resolved| Outstanding | 
********************************************* 
| A  | 1 | 0 | 1  | 
********************************************* 
| A  | 2 | 1 | 2  | 
********************************************* 
| A  | 1 | 2 | 1  | 
********************************************* 
| B  | 3 | 2 | 1  | 
********************************************* 
| B  | 2 | 1 | 2  | 
********************************************* 

1)列はIによりグループ化する @runtot

優秀に使用

3)計算 - (@runtot:=( jtb.Opened + @runtot) - jtb.Resolved AS残高

私の質問: -

SELECT jtb.Project,jtb.Opened,jtb.Resolved, 
(@runtot := (jtb.Opened + @runtot) - jtb.Resolved) AS Outstanding FROM 
(SELECT ji.project AS Project_Id, 
pr.pname AS Project_Name, 
COUNT(DISTINCT(ji.ID)) AS Opened, 
COUNT(IF(ji.issuestatus = 5 OR ji.issuestatus = 6,ji.issuestatus,NULL)) AS Resolved 
FROM jiraissue ji 
LEFT OUTER JOIN priority p ON (p.ID = ji.priority) 
LEFT OUTER JOIN project pr ON (ji.project = pr.ID) 
GROUP BY ji.project) jtb, 
(SELECT @runtot:=0) c 

は親切に最後に

+1

お読みください[、最小完全、かつ検証例を作成する方法](https://stackoverflow.com/help/mcve)。現在、あなたの質問にはサンプルデータがありません。それがなければ、あなたが私たちにしたいものを知ることは本当に難しいです。 – waka

+0

これでいいですか?変更が必要な場合はお知らせください。@ wakaのURLに感謝します。 –

+0

画像の出力が試したクエリの出力と一致しません。クエリには異なるフィールドがあります。また、plsは結果をテキストとして、noを画像として、サンプルデータを含めて結果を出力します。 – Shadow

答えて

0

:)私を助けて、このquestionは溶液を得ました。プロジェクト名を更新するために、クエリにグローバル変数を1つ追加しました。したがって、新しいプロジェクトが@prev_projectに到着すると、@ runtot = 0が更新されます。

クエリは私のために動作します: -

SELECT jtb.Project,jtb.Opened,jtb.Resolved, 
(@runtot := IF(jtb.Project = @prev_project, ((@runtot+jtb.Opened) - 
jtb.Resolved),(jtb.Opened - jtb.Resolved))) AS Outstanding, 
@prev_project := jtb.Project AS sample_project_name FROM 
(SELECT ji.project AS Project_Id, 
pr.pname AS Project_Name, 
COUNT(DISTINCT(ji.ID)) AS Opened, 
COUNT(IF(ji.issuestatus = 5 OR ji.issuestatus = 6,ji.issuestatus,NULL)) AS Resolved 
FROM jiraissue ji 
LEFT OUTER JOIN project pr ON (ji.project = pr.ID) 
GROUP BY ji.project) jtb, 
(SELECT @runtot:=0, @prev_project := NULL) c