将数据表中的数据按时、按天、按月显示,计算平均值

本文介绍了两种在C#中计算数据表中按天、按月、按小时平均值的方法。第一种方法使用存储过程进行循环查询,虽然执行速度快但参数多。第二种方法则是先将数据取出,然后在内存中处理,根据需求按小时、天或月计算平均值。
摘要由CSDN通过智能技术生成
目的: 将数据库中的数据,按小时、按天、按月显示,各个数据都是其时间段内的平均值。 

关于这个问题,在Csdn上问了一下,木有人给出想要的答案,跟同学鼓捣了一下,解决……

方法一:利用存储过程,这种方法还是比较有效和快速的,但是觉得在这个系统中,表啊 字段啊条件啊 都是拼接的,需要给存储过程传递参数太多了,太麻烦了,只好忍痛割爱,不用这种方法。但是 这种方法的执行速度还是蛮理想的。

创建的存储过程,这个SQl存储过程是个循环滴……


Create procedure [dbo].[testtable_2]

        @tb_1 nvarchar(100), @tb_2 nvarchar(100),
        @fld_tb1 nvarchar(100), @fld_tb2 nvarchar(100),
        @fn_tb1 nvarchar(100), @fn_tb2 nvarchar(100),
        @dt1 datetime,@dt2 datetime---------------------------------------------这些是需要从外界传进来的参数
       
as
begin
   declare @newdt1 datetime ;
    declare @i int,@dt datetime;

    declare @datediff int;
declare @dt11 varchar(30);
declare @newdt11 varchar(30);

--set @dt='2011-2-13';
--计算时间间隔
set @datediff=datediff(day,@dt1,@dt2);------------------------datediff(day,date1,date2),函数 计算两个日期间的时间间隔:天数
set @i=-1;
--set @time='time';

while @i<@datediff                       -------------------------------循环

begin
set @newdt1=dateadd(dd,1,@dt1) ;-----------dateadd函数,天数加1
set @dt11= convert(varchar(30),@dt1 ,102);
set @newdt11= convert(varchar(30),@newdt1 ,102);

 EXEC('
     SELECT
      convert(varchar(30),'''+ @dt11 +''',111) as [时间],
     sum(['+ @fld_tb1 + '])/count(*) as [' + @fn_tb1 + '],
     sum([' + @fld_tb2 + '])/count(*) as [' + @fn_tb2 + '] ----------------------------计算平均值
    
   FROM 
     ['+ @tb_1 + ']
  INNER JOIN  [' + @tb_2 + '] ON [' + @tb_1  + '].Time = [' +  @tb_2  + '].Time
  where [' +  @tb_2  + '].Time between '''+ @dt11 +'''  and ''' + @newdt11 + '''
'
)

set @dt1=@newdt1;
set @i=@i+1;

end
end
GO

这个存储结构是不断的进行循环查询的,每循环一次,

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值