2015-06-15 118 views
-1

我遇到以下问题。如何将以下数据按照每周总结计算的方式进行分组。每周(星期日至星期六)的基础数据组

+---------------------+-----+ 
    |   data  |count| 
    +---------------------+-----+ 
    | 2012-08-01 00:00:00 | 4 | 
    | 2012-08-02 00:00:00 | 5 | 
    | 2012-08-03 00:00:00 | 6 | 
    | 2012-08-04 00:00:00 | 6 | 
    | 2012-08-05 00:00:00 | 8 | 
    | 2012-08-06 00:00:00 | 6 | 
    | 2012-08-07 00:00:00 | 8 | 
    | 2012-08-08 00:00:00 | 6 | 
    | 2012-08-09 00:00:00 | 2 | 
    | 2012-08-10 00:00:00 | 0 | 
    | 2012-08-11 00:00:00 | 5 | 
    | 2012-08-12 00:00:00 | 4 | 
    | 2012-08-13 00:00:00 | 4 | 
    | 2012-08-14 00:00:00 | 0 |   
    +---------------------+-----+ 

本周应该在周日进行计算 - 周六格式.....

+0

请先检查相关问题。即[this](http://stackoverflow.com/questions/9182644/query-a-mysql-database-and-group-by-date-range-to-create-a-chart?rq=1)和[this] (http://stackoverflow.com/questions/10597101/weekly-total-sums?rq=1) – Pilskalns

+0

你使用什么数据库?我从“mssql-jdbc”猜测SQL Server,但你应该明确地标记问题。 –

+0

我试过以下查询...但没有得到星期日 - 星期六格式的结果选择DATEADD(星期,DATEDIFF(星期,0,数据),0)作为星期一,总和(计数) 从表 其中data> getdate( )-30 group by DATEADD(week,DATEDIFF(week,0,data),0); – chinnusaccount

回答

1

从日期减去星期(假设没有时间部分),通过它,然后组:

select 
    dateadd(day, -(DATEPART(weekday, data) + @@DATEFIRST + 4) % 7, data) 
    ,sum([count]) 
from tab 
group by 
    dateadd(day, -(DATEPART(weekday, data) + @@DATEFIRST + 4) % 7, data) 

(DATEPART(weekday, data) + @@DATEFIRST + 4) % 7返回独立于@@DATEFIRST设定的0(=星期日)和6(星期六)之间的数字。

请参阅Fiddle

相关问题