一个表 三个字段 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和每周总价格 只有一个结果集 查询结果保存在一张表中
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和每周总价格 只有一个结果集 查询结果保存在一张表中
解决方案 »
- 请问这条登录查询语句怎么写?
- SQL server 2005连接失败
- 有个超级好玩的问题
- 请推荐使用 Visual C++对SQL server 数据库进行编程的好书!
- 请问如何安装SQL Server2000呢?
- sql难题,求救了.比较字符串?解决就给分
- 如何将存储快照的文件夹放在自己想放的的磁盘上?在线等待,马上给分
- 如何把DOS下FOX26生成的表快速导入SQLSERVER?邹建请进!!
- 能否对SQLSERVER中的存储过程或触发器进行加密,使别人进入数据库中不能看自已所编写的内容?
- 请教一个问题:什么是大型数据库?
- MS-SQL 能否对特定表不记录操作日志?
- 存储过程 语法有错误,哪位大哥帮帮忙,在线等
from stock
group by datepart(wk,tdate)
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
要查询这个数据库 查询每周资金总和以是见倒序 获得96条数据
但是要注意 周六周日没有数据 也就是说一周一个id只有5条数据
另外 如果今天要是星期3的话 那么这周的数据就是有周一周二周三 三条 如果在过一天 数据会多一条
这周的数据总和也会跟着变
这个id大概编号到2000 可以算下 96条数据要查出来的话 这个表的数据总和大概是
2000*96*5=960000条 这是个实际应用的例子 麻烦高手都出来帮忙想想办法
from stock
group by SubStr(tdate, 0, 7), datepart(wk,tdate)
order by SubStr(tdate, 0, 7) desc, datepart(wk, tdate) desc
???