查询消息汇总

cwaspnet 2009-07-23 10:22:35
一个表 三个字段 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和每周总价格 只有一个结果集 查询结果保存在一张表中
...全文
109 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwaspnet 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 lyw110 的回复:]
SQL codeselecttop96sum(price),datepart(wk,tdate), SubStr(tdate,0,7)from stockgroupby SubStr(tdate,0,7),datepart(wk,tdate)orderby SubStr(tdate,0,7)desc,datepart(wk, tdate)desc


???
[/Quote]
SubStr?这个是什么?
Lyw110 2009-07-24
  • 打赏
  • 举报
回复


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




???
cwaspnet 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jinjazz 的回复:]
反正你的思路有问题,需要什么汇总就用什么group by 就行了
[/Quote]
那好 我在说一遍需求
要查询这个数据库 查询每周资金总和以是见倒序 获得96条数据
但是要注意 周六周日没有数据 也就是说一周一个id只有5条数据
另外 如果今天要是星期3的话 那么这周的数据就是有周一周二周三 三条 如果在过一天 数据会多一条
这周的数据总和也会跟着变
这个id大概编号到2000 可以算下 96条数据要查出来的话 这个表的数据总和大概是
2000*96*5=960000条 这是个实际应用的例子 麻烦高手都出来帮忙想想办法
cwaspnet 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 honsen_simon 的回复:]
上面的方法不是都可以的吗?

是不是这样改:
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

[/Quote]
这个语法有点问题
cwaspnet 2009-07-23
  • 打赏
  • 举报
回复
没人解决?
cwaspnet 2009-07-23
  • 打赏
  • 举报
回复
没人帮忙了
cwaspnet 2009-07-23
  • 打赏
  • 举报
回复
这个是要求 别人要这么多有什么办法 你这个查询会把今年的第一周和去年的第一周的信息也加一块了 不能用 看那个过程吧 帮忙把过程修改一下
jinjazz 2009-07-23
  • 打赏
  • 举报
回复
反正你的思路有问题,需要什么汇总就用什么group by 就行了
jinjazz 2009-07-23
  • 打赏
  • 举报
回复
为什么要96?

cwaspnet 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jinjazz 的回复:]
select sum(price),datepart(wk,tdate),id from stock group by datepart(wk,tdate),id


[/Quote]

你这个查询不行 你这样差的话数据怎么都不可能有96条
jinjazz 2009-07-23
  • 打赏
  • 举报
回复
select sum(price),datepart(wk,tdate),id from stock group by datepart(wk,tdate),id

cwaspnet 2009-07-23
  • 打赏
  • 举报
回复
人呢?
cwaspnet 2009-07-23
  • 打赏
  • 举报
回复
高手进来帮帮忙啊
cwaspnet 2009-07-23
  • 打赏
  • 举报
回复
问题上不是写了么 看上面的问题
jinjazz 2009-07-23
  • 打赏
  • 举报
回复
那你要什么数据
cwaspnet 2009-07-23
  • 打赏
  • 举报
回复
你这样的查询会有问题的
jinjazz 2009-07-23
  • 打赏
  • 举报
回复
这不是每周汇总么
cwaspnet 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jinjazz 的回复:]
SQL codeselectsum(price),datepart(wk,tdate)from stockgroupbydatepart(wk,tdate)
[/Quote]
jinjazz 2009-07-23
  • 打赏
  • 举报
回复
select sum(price),datepart(wk,tdate)
from stock
group by datepart(wk,tdate)
cwaspnet 2009-07-23
  • 打赏
  • 举报
回复
怎么没人帮忙啊
加载更多回复(1)

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧