好象直接有个语句不可以吧
用while看看了

解决方案 »

  1.   

    这样给你个思路
    先找到@min = min(date) from table where date = '2005-01-01'
          @max = max(date) from talbe where date = '2005-01-08'
    while @min <= @max 
    begin
    --在这写代码
      set @min = @min + 3
    end
    这样就可以了。
      

  2.   

    1.以天为单位生成sum
    select identity(int,1,1) id,datepart(dd,date) datep,sum(number) counts
    into aaaa
    from book
    where [date] between '1/1/2005' and '1/8/2005'
    group by datepart(dd,date)2。创建一个新表
    create table bbb
    (sum int)
    3。每3天生成一个sum(总和)
    declare @a int
    set @a=0
    while @a<=(select count(1) from aaaa)
    begin
    insert bbb
    select sum(counts)
    from aaaa
    where id<=@a+3 and id>=@a
    set @a=@a+3
    end4。查询该表
    select * from bbb
      

  3.   

    我给出一个思路,应该行得 通的:
    如果在所给固定时间范围内的id是连续的话,比如2005-01-01至2005-01-08之间的id是1-8,这样就可以先在子查询里取(id-1)/3的整数部分和number值,这样id就成了0 0 0 1 1 1 2 2,然后在子查询外对id分组求出sum(number)就行了
    如果日期是连续的话,也可以先取出date字段跟系统日期之间的相差天数,这些相差的天数也是连续的,再根据上面的方法也可以的
    如果日期和id都不连续的话,还没想到好办法,如果sql server 里有oracle里的rownum伪列的话就都好办了
      

  4.   

    select
    start_date = min(date),
    end_date = max(date),
    count_all = count(*),
    sum_number = sum(number)
    from #t -- your table
    group by datediff(d,'20050101',date)/3