一个表   三个字段   id  price  tdate
id和tdate是联合主键   价格为每天卖出的总价
我写了个存储过程   按时间7天一组   汇总价格    就是说求出每周总价格  要前96条记录
存储过程如下
if(exists(select * from sysobjects where name='proc_stock'))
drop proc proc_stock
go
create proc proc_stock
as
declare @stardate datetime
declare @d datetime
declare @i int
declare @begindate datetime
declare @enddate datetime
begin
set @d=getdate()
set @i=0
select @stardate=dateadd(wk,datediff(wk,0,@d),0)
while @i<96
begin
set @begindate=dateadd(day,-(@i*7),@stardate)
if @i<>0
begin
set @enddate=dateadd(day,-(@i-1)*7-1,@stardate)
end
else 
begin
set @enddate=@d
end
select sum(price) from stock where tdate 
between @begindate and @enddate
set @i=@i+1
end
end请高手帮忙修改下  这个查出来的只有每周的总价格   是96条查询就有96个结果集
要求的结果是查出id和每周总价格   只有一个结果集  查询结果保存在一张表中    

解决方案 »

  1.   

    select sum(price),datepart(wk,tdate)
    from stock
    group by datepart(wk,tdate)
      

  2.   

    select sum(price),datepart(wk,tdate),id from stock group by datepart(wk,tdate),id
      

  3.   

    反正你的思路有问题,需要什么汇总就用什么group by 就行了
      

  4.   

    上面的方法不是都可以的吗?是不是这样改:
    if(exists(select * from sysobjects where name='proc_stock'))
    drop proc proc_stock
    go
    create proc proc_stock
    as
    declare @stardate datetime
    declare @d datetime
    declare @i int
    declare @id_count int
    declare @begindate datetime
    declare @enddate datetime
    begin
        set @d=getdate()
        set @id_count=0
        set @i=0
        select @stardate=dateadd(wk,datediff(wk,0,@d),0)
        while @i<96
            begin
                set @begindate=dateadd(day,-(@i*7),@stardate)
                if @i<>0
                    begin
                        set @enddate=dateadd(day,-(@i-1)*7-1,@stardate)
                    end
                else 
                    begin
                        set @enddate=@d
                    end
                select sum(price),id from stock where tdate 
                between @begindate and @enddate group by id
                set @id_count=(select count(id) from (select sum(price),id from stock where tdate 
                between @begindate and @enddate group by id))
                set @i=@i+@id_count
            end
    end
      

  5.   

    那好  我在说一遍需求
    要查询这个数据库  查询每周资金总和以是见倒序 获得96条数据  
    但是要注意  周六周日没有数据  也就是说一周一个id只有5条数据
    另外  如果今天要是星期3的话  那么这周的数据就是有周一周二周三  三条  如果在过一天  数据会多一条
    这周的数据总和也会跟着变
    这个id大概编号到2000  可以算下  96条数据要查出来的话  这个表的数据总和大概是
    2000*96*5=960000条   这是个实际应用的例子   麻烦高手都出来帮忙想想办法
      

  6.   

    select top 96 sum(price),datepart(wk,tdate), SubStr(tdate, 0, 7)
    from stock
    group by SubStr(tdate, 0, 7), datepart(wk,tdate)
    order by SubStr(tdate, 0, 7) desc, datepart(wk, tdate) desc
    ???