2016-08-02 18 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