Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果您有每日数据,如何进行每周分组_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 如果您有每日数据,如何进行每周分组

Sql 如果您有每日数据,如何进行每周分组,sql,sql-server,tsql,Sql,Sql Server,Tsql,我现在被这个问题困扰着。假设我有以下每日数据 +-------------------------+-----+----+ | Date | C1 | C2 | +-------------------------+-----+----+ | 2012-08-01 00:00:00.000 | 44 | 44 | | 2012-08-02 00:00:00.000 | 51 | 49 | | 2012-0

我现在被这个问题困扰着。假设我有以下每日数据

    +-------------------------+-----+----+
    |          Date           | C1  | C2 |
    +-------------------------+-----+----+
    | 2012-08-01 00:00:00.000 |  44 | 44 |
    | 2012-08-02 00:00:00.000 |  51 | 49 |
    | 2012-08-03 00:00:00.000 |  60 | 59 |
    | 2012-08-04 00:00:00.000 |  68 | 67 |
    | 2012-08-05 00:00:00.000 |  82 | 78 |
    | 2012-08-06 00:00:00.000 |  62 | 59 |
    | 2012-08-07 00:00:00.000 |  58 | 53 |
    | 2012-08-08 00:00:00.000 |  69 | 65 |
    | 2012-08-09 00:00:00.000 |  82 | 72 |
    | 2012-08-10 00:00:00.000 |  70 | 68 |
    | 2012-08-11 00:00:00.000 |  75 | 71 |
    | 2012-08-12 00:00:00.000 |  64 | 64 |
    | 2012-08-13 00:00:00.000 |  74 | 69 |
    | 2012-08-14 00:00:00.000 |  60 | 56 |
    | 2012-08-15 00:00:00.000 |  66 | 60 |
    | 2012-08-16 00:00:00.000 |  57 | 51 |
    | 2012-08-17 00:00:00.000 |  52 | 49 |
    +-------------------------+-----+----+
我如何将其分组,使其每周汇总C1和C2? 预期产出应为

+---------------------------+------+----+
|          Date             |  C1  | C2 |
+---------------------------+------+----+
| 2012-08-06 to 2012-12-12  |  480 | 452|
| 2012-08-13 to 2012-08-19  |  430 | 394|
+---------------------------+------+----+
它始于2012-08-06,因为周期应为周一至周日。 我在谷歌上搜索了大约一个小时,似乎没有找到适合我的问题,我希望有人能帮助我

谢谢

试试这个:

1会将您的本周开始时间设置为周一

SET DATEFIRST 1

    SELECT CAST(MIN( [DATE]) AS VARCHAR(20))+' TO '+CAST (MAX([DATE]) AS VARCHAR(20)) AS DATE,
           SUM(C1) AS GRU,
           SUM(C2) AS C1
    FROM   YOUR_TABLE
    GROUP BY DATEPART(WEEK,[DATE])
    HAVING COUNT(DISTINCT[DATE])=7

SET DATEFIRST 7

也许是这样(记住接受答案)


正是我想要的。谢谢嗨,t-clausen,我试过了,但似乎开始日期是2012-07-30到2012-08-05,7-30不是星期一。感谢您抽出宝贵的时间@Sherwin 2012-07-30是星期一,我的解决方案更好。它不依赖于数据库设置。是的,对不起。是的,我同意,不过你的解决方案更好。谢谢
declare @t table(Date datetime, C1 int, C2 int)
insert @t values('2012-08-01',44,44)
insert @t values('2012-08-02',51,49)
insert @t values('2012-08-03',60,59)
insert @t values('2012-08-04',68,67)
insert @t values('2012-08-05',82,78)
insert @t values('2012-08-06',62,59)
insert @t values('2012-08-07',58,53)
insert @t values('2012-08-08',69,65)
insert @t values('2012-08-09',82,72)
insert @t values('2012-08-10',70,68)
insert @t values('2012-08-11',75,71)
insert @t values('2012-08-12',64,64)
insert @t values('2012-08-13',74,69)
insert @t values('2012-08-14',60,56)
insert @t values('2012-08-15',66,60)
insert @t values('2012-08-16',57,51)
insert @t values('2012-08-17',52,49)

select 
convert(varchar(10), dateadd(week, datediff(week, 0, date-1),0), 120)+' to '+
convert(varchar(10), max(dateadd(week, datediff(week, 0,date-1),6)), 120) Date,
sum(C1) GRU, sum(C2) C1
from @t
group by dateadd(week, datediff(week, 0, date-1),0)
having datediff(day, 0, min(date)) %7 = 0