2013-10-11 33 views
1

我想从过滤器中显示所选日期范围的打开和关闭计数。数据将按组织产品,月和周分组。但问题是我计算开放和结束周。打开有一个单独的列并关闭具有不同的。它可以是任何单一领域的组像我想要这个:星期分组

Week    Open   Close 

0     3   5 
1     2   0 

如果关闭的日期是不是在本周开2日。而存在于2周之应该显示像:

Week   Open  Close 

2    3   0 

如何将它在两列上分组?

请帮忙。

+0

我真的不明白你想要什么。如果您希望每周有开盘和结算总额,您可以使用: 'SELECT SUM(open)AS totalOpen,SUM(close)AS totalClose FROM table GROUP BY week'。并考虑将“星期”重命名为其他内容,因为它也是MySQL的一项功能。 – davey

+0

你应该分享你的查询。 – AgRizzo

+0

我使用mysql week函数计算周。但问题是它要求列字段。这对于打开和关闭列是不同的,所以我应该在哪个字段中使用它。我使用WEEK(datefield,5) - WEEK(DATE_SUB(datefield,INTERVAL DAYOFMONTH(datefield)-1 DAY),5)作为计算星期的星期。根据他们的价值观,开放和关闭的周数都不同 – user2870894

回答

0

举例说明如何根据开放和结束周进行分组。

SELECT Organization, Product, Month, 
     week, 
     sum(open) AS open, 
     sum(close) AS close 
FROM (

    SELECT Organization, Product, Month, 
      open_week AS week, 
      count(*) AS open, 
      0 AS close 
    FROM tab 
    GROUP BY Organization, Product, Month, open_week 

    UNION ALL 

    SELECT Organization, Product, Month, 
      close_week AS week, 
      0 AS open, 
      count(*) AS close 
    FROM tab 
    GROUP BY Organization, Product, Month, close_week 

) alias 
GROUP BY Organization, Product, Month, week 
ORDER BY Organization, Product, Month, week 

演示包括 - >http://www.sqlfiddle.com/#!2/01ac3/1

为了简单起见,例子是使用monthclose_weekopen_week
的功能,而不是像这样:
WEEK(datefield,5) - WEEK(DATE_SUB(datefield, INTERVAL DAYOFMONTH(datefield)-1 DAY),5)