Mysql 如何显示计算日期表以及每周汇总的记录?

Mysql 如何显示计算日期表以及每周汇总的记录?,mysql,sql,database,stored-procedures,Mysql,Sql,Database,Stored Procedures,我在MySQL数据库中有一个表,如屏幕截图所示: 我的目标是汇总每周的数据记录。为此,我们从表中的第一天开始计算一周,这是表中的最小日期 结果表应如下所示: Period Cage Total NumberOf Items ------------------------------- Week 1: 07-03-2016 to 13-03-2016 1

我在MySQL数据库中有一个表,如屏幕截图所示:

我的目标是汇总每周的数据记录。为此,我们从表中的第一天开始计算一周,这是表中的最小日期

结果表应如下所示:

Period                                Cage         Total NumberOf Items
-------------------------------        
Week 1: 07-03-2016 to 13-03-2016        1                  xxx
Week 2: 14-03-2016 to 20-06-2016        1                  xxx
Week 3: 21-03-2016 to 27-06-2016        1                  xxx
Week 1: 07-03-2016 to 13-06-2016        2                  xxx
Week 2: 14-03-2016 to 20-06-2016        3                  xxx   
Week 4: 28-03-2016 to 03-04-2016        3                  xxx 
如上所示,项目总数是每个框架中每周计算的总和

开始日期是表中最短的日期,因此我们必须在这个最短日期的基础上再加上6天才能得到第一周的结束日期

第二周将从第一周结束日期后的一天开始,持续6天

接下来是第三周,依此类推

我知道使用派生查询,我们可以得到结果,但随着时间的推移,日期的数量会增加,周数也会增加。所以我的直觉告诉我,存储过程/循环/函数可能会有所帮助

我们如何实现这一结果

select 
str_to_date(`Date`,'%d/%m/%Y')`Date`,
case when year(str_to_date(`Date`,'%d/%m/%Y')) = '2016' then
 (case 
 when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y'))) from  `tab1`) 
then 'Week 1' 
when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y')))+1 from  `tab1`)
then 'Week 2'
when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y')))+1+1 from  `tab1`)
then 'Week 3'
when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y')))+1+1+1 from  `tab1`)
then 'Week 4'
when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y')))+1+1+1+1 from  `tab1`)
then 'Week 5'
when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y')))+1+1+1+1+1 from  `tab1`)
then 'Week 6'
when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y')))+1+1+1+1+1+1 from  `tab1`)
then 'Week 7'
when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y')))+1+1+1+1+1+1+1 from  `tab1`)
then 'Week 8'
when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y')))+1+1+1+1+1+1+1+1 from  `tab1`)
then 'Week 9'
when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y')))+1+1+1+1+1+1+1+1+1 from  `tab1`)
then 'Week 10'
when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y')))+1+1+1+1+1+1+1+1+1+1 from  `tab1`)
then 'Week 11'
when week(str_to_date(`Date`,'%d/%m/%Y')) = (select week(min(str_to_date(`Date`,'%d/%m/%Y')))+1+1+1+1+1+1+1+1+1+1+1 from  `tab1`)
then 'Week 12'
else '' end) else 
'Not this Year' end `Weeks`
from
`tab1`

我尝试过使用上面的代码,但它的可扩展性不够,随着记录数量的增加和日期的增加,查询不会有多大帮助。

这种功能称为
聚合
函数。参见:Maciej Los,我也读过聚合函数-我不认为聚合函数可以单独解决我的问题-@Shadow-你和我如何,使用子查询?因为我试过使用子查询,你可以在问题帖中看到!