表TB(姓名,当前余额,日期)
张三,1000,20110101
张三,1500,20110105
张三,500 , 20110110
最终实现的表是:姓名,当前余额,日均余额.
难点在于:虽然2,3,4日没有当前余额,可是只是说明这几日的余额没有变化,一直保持为1000,而5日加了500元,从6日到9日一直为1500这个数,而到了10日,余额变为了500,那么在该日期段内的日均余额应该为:(1000*4+1500*5+500)/10.
而当前余额应该为500元,有什么实现的好办法?
张三,1000,20110101
张三,1500,20110105
张三,500 , 20110110
最终实现的表是:姓名,当前余额,日均余额.
难点在于:虽然2,3,4日没有当前余额,可是只是说明这几日的余额没有变化,一直保持为1000,而5日加了500元,从6日到9日一直为1500这个数,而到了10日,余额变为了500,那么在该日期段内的日均余额应该为:(1000*4+1500*5+500)/10.
而当前余额应该为500元,有什么实现的好办法?
还是在程序里实现吧,要不就写存储过程
你要求日均余额应该不难吧,算出每天余额之和,然后求平均数:avg(Count(当天余额))。
declare @date int
select @date = max([日期]) from TB where [姓名]='张三'
declare @total int
declare @i int
declare @count int
declare @datetime int
set @count=1
select @total=[当前余额],@i=[当前余额],@datetime=[日期] from TB where [日期]=(select Min
([日期]) from TB where [姓名]='张三' )while(@datetime < @date)
begin
set @datetime=@datetime+1
if(exists(select 1 from TB where [姓名]='张三' and [日期]=@datetime))
select @i= [当前余额] from TB where [姓名]='张三' and [日期]=@datetime
set @total=@total+@i
set @count =@count+1
end
select [姓名]='张三',[当前余额]=@i,[日均余额]=@total/@count/*
姓名 当前余额 日均余额
---- ----------- -----------
张三 500 1200
*/