2015-06-05 25 views
1

我們有一組來自SQL查詢的數據,我們希望使用該數據創建折線圖。用定義的邏輯創建折線圖

SELECT REPLACE(req2.value,"Sprint 1", "sum") AS sprint , SUM(val) AS VALUE FROM 
(SELECT issue AS iss,SUM(VALUE) AS val FROM dataissue,issue WHERE FIELD LIKE 'poin%' AND dataissue.issue = issue.id AND VALUE IS NOT NULL AND issue IN (SELECT issue FROM dataissue,issue WHERE FIELD = 'sprint' AND dataissue.issue = issue.id AND VALUE IS NOT NULL) GROUP BY VALUE,issue) req1 JOIN (SELECT issue,VALUE FROM dataissue,issue WHERE FIELD LIKE 'sprint%' AND dataissue.issue = issue.id AND VALUE IS NOT NULL) req2 
WHERE iss = req2.issue 

UNION ALL 

SELECT main2.value AS sprint , SUM(val) AS VALUE FROM 
(SELECT issue AS iss,SUM(VALUE) AS val FROM dataissue,issue 
    WHERE FIELD LIKE 'poin%' AND dataissue.issue = issue.id AND 
    VALUE IS NOT NULL AND issue IN (SELECT issue FROM dataissue,issue 
        WHERE FIELD = 'sprint' AND dataissue.issue = issue.id AND VALUE IS NOT NULL) GROUP BY VALUE,issue) 
        main1 JOIN (SELECT issue,VALUE FROM dataissue,issue 
           WHERE FIELD LIKE 'sprint%' AND dataissue.issue = issue.id AND VALUE IS NOT NULL) main2 
WHERE iss = main2.issue GROUP BY main2.value 

ORDER BY CAST(SUBSTRING(sprint,LOCATE(' ',sprint)+1) AS SIGNED) 

----------------------------------- 
|      617,5 
    sprint1 | 52 | 565,5 |  
    Sprint 2  35   530,5 
| 
| 

第二列是不是一個計算值(形成數據庫) 第三個還 第四列的第一行是一個計算值 的邏輯是:

617,5 - 52 = 565,5 
565,5 - 35 = 530,5 and so on 

如何我們要用SQL來實現這個邏輯嗎?

回答

1

這裏是sql來計算累加減法。

SELECT @prev_sets := t.sprint AS sprint,@prev_set := t.VALUE AS VALUE, 
      ROUND(IF(0<@i,@i:[email protected] , @i:[email protected]),2) AS `VALUE` 
FROM (


SELECT req2.value AS sprint , SUM(val) AS VALUE FROM 
(SELECT issue AS iss,SUM(VALUE) AS val FROM dataissue,issue WHERE FIELD LIKE 'poin%' AND dataissue.issue = issue.id AND VALUE IS NOT NULL AND issue IN (SELECT issue FROM dataissue,issue WHERE FIELD = 'sprint' AND dataissue.issue = issue.id AND VALUE IS NOT NULL) GROUP BY VALUE,issue) req1 JOIN (SELECT issue,VALUE FROM dataissue,issue WHERE FIELD LIKE 'sprint%' AND dataissue.issue = issue.id AND VALUE IS NOT NULL) req2 
WHERE iss = req2.issue 

UNION ALL 


SELECT main2.value AS sprint , SUM(val) AS VALUE FROM 
(SELECT issue AS iss,SUM(VALUE) AS val FROM dataissue,issue 
    WHERE FIELD LIKE 'poin%' AND dataissue.issue = issue.id AND 
    VALUE IS NOT NULL AND issue IN (SELECT issue FROM dataissue,issue 
        WHERE FIELD = 'sprint' AND dataissue.issue = issue.id AND VALUE IS NOT NULL) GROUP BY VALUE,issue) 
        main1 JOIN (SELECT issue,VALUE FROM dataissue,issue 
           WHERE FIELD LIKE 'sprint%' AND dataissue.issue = issue.id AND VALUE IS NOT NULL) main2 
WHERE iss = main2.issue GROUP BY main2.value 

ORDER BY CAST(SUBSTRING(sprint,LOCATE(' ',sprint)+1) AS SIGNED) 
) 
t 
        JOIN (SELECT @prev_sets := NULL,@prev_set := NULL, @i := 0 ) i 

    ---------------------------------------------------- 
    sprint   | value | cumulative_subtract | 
    ---------------------------------------------------- 
        |   |  67.5   | 
    ---------------------------------------------------- 
    sprint1  | 52  |  518.75   | 
    ---------------------------------------------------- 
    sprint2  | 35  |   483.75  | 
    ---------------------------------------------------- 

我認爲它會幫助你。

謝謝。