2016-08-02 19 views
0

我有一個表: (與X5編者)MySQL的:總和由不同基團的由

_date(2014-03-05;2014-04-05) 
_period(1,2,3,4,5,1,2,3,4,5,1,2; 1,2,3,4,5,1,2,3,4,5) 
_id(x1,x1,x1,x1,x1,x2,x2,x2,x2,x2,x3,x3;x4,x4,x4,x4,x4,x5,x5,x5,x5,x5) 
_reading(1,1,1,1,1,2,2,2,2,2,5,6;1,1,1,1,1,2,1,1,1,1) 
_reading2 (5,5,5,5,5,4,4,4,4,4,7,7;1,1,1,1,1,1,1,1,1,1) 

image of the table 1

我需要一個結果如下面這消除不具有所有數據全週期1至5爲_id,然後計算用於_reading的_reading2一天總和一天每個不同_id的總和:

_date(2014-03-05;2014-04-05) 
sum_reading(15;11) 
sum_reading2 (9;2) 

image of the table2

+0

我不是很瞭解表格格式。我也無法看到9在sum_reading2上的位置。我認爲sum_Reading上的15來自1和2之和,而不是5,6,因爲5,6等於1.2,這是一個部分,因此不是期望的。但這不是標準的數據佈局。我以前見過。我們能否將數據放在表格格式中,列標題和行代表實際數據和預期結果? – xQbert

+0

@xQbert,我添加了表格的圖片,希望這有助於。 9來自_reading2加5 + 4,因爲_reading2對於_id每日有相同的值,它只是對每個_period重複一次,我只需要計算一次。 – Lina

+0

但讀數1對於所有的值都有1,所以我們總結那些?如果是這樣,我的觀點是我們實際上在總結閱讀1,但是我們在閱讀2中總結了DISTINCT值......所以也許只是總和(Distinct reading2)? – xQbert

回答

0

測試:SQL Fiddle

我使用子查詢,以消除不具有完整的5個週期的_ids。 然後,我使用按日期和_ID和總和與總和不同得到總和與總結不同的值。

SELECT A._date, sum(_Reading) as _Reading, 
       sum(Distinct _Reading2) as _Reading2 
FROM table A 
INNER JOIN (SELECT _ID, _date 
      FROM table 
      GROUP BY _ID, _date 
      HAVING count(_Period) = 5) B 
on A._ID = B._ID 
and A._Date = B._Date 
GROUP BY A._Date 

這仍然不能滿足您的需求,因爲讀數和減少的順序在閱讀2時實際上很重要;不只是總結不同。但由於我不清楚這些要求,所以這與我們所期望的結果相符......這是我現在所能做到的最好的。

X5的更新 - 通過在內部層面獲得明顯的總和,我們可以總結我認爲可能解決問題的讀數。

SELECT A._date, sum(_Reading) as _Reading, 
       sum(B.I_reading2) as _Reading2 
FROM table A 
INNER JOIN (SELECT _ID, _date, Sum(Distinct _Reading2) as I_Reading2 
      FROM table 
      GROUP BY _ID, _date 
      HAVING count(_Period) = 5) B 
on A._ID = B._ID 
and A._Date = B._Date 
GROUP BY A._Date 
+0

謝謝,這解決了我的部分問題。但是,當我將x5添加爲_id並且在結果中爲_reading2設置了1時,我得到1的總和爲_reading2,而我應該得到2.我相信這是因爲獨特性,是否可以用比較來替換它那種? http://sqlfiddle.com/#!9/1b5f6/1 – Lina

+0

您可以調整鏈接的小提琴並重新鏈接以顯示問題我不確定您的日期以及x5的位置正在被添加並且具有什麼值。 – xQbert

+0

我剛剛加入:插入foo值('2014-03-06',1,'x5',1,1);插入foo值('2014-03-06',2,'x5',1,1);插入foo值('2014-03-06',3,'x5',2,1);插入foo值('2014-03-06',4,'x5',2,1);插入foo值('2014-03-06',5,'x5',1,1); sqlfiddle.com/#!9/1b5f6/1/0 – Lina