数据表为以下结构   时间字段  A   数字字段  B
假设     A                       B
       11\01\2005                1
       11\01\2005                2
       12\01\2005                3
       12\01\2005                4
       14\01\2005                5
       14\01\2005                5
现在要求输出每天的和以及每天的平均.  即
         A            B            C
       11\01\2005     3            3
       12\01\2005     7            5 (3+7)/2
       14\01\2005     10           5 (3+7+10)/4
(就是C字段为  该条记录的 日期 前所有记录B字段的和除该记录的
日期与第一条记录的日期所差的天数) 不知道有没有可以实现这个功能的SQL语句.
如果没有的话,能否告知怎么才可以实现这个功能                   
       

解决方案 »

  1.   

    select a,sum(b),sum(b)*0.1/count(b) from 数据表 group by a
      

  2.   

    select a,sum(b),avg(b) from 数据表 group by a
      

  3.   

    看来楼上的都没领会LZ的意思。依我看,一个SQL是搞不定的...
      

  4.   

    看看这个:select M.a,N.sum(b),N.sum(b)/(M.a-N.min(a)+1) 
    from 数据表 M, 数据表 N
    where N.b<=M.a 
    group by M.a
      

  5.   

    写错,上面的Where中为:N.a<=M.a
      

  6.   

    汗~~ 还是搞错了,看看这个吧:
    select M.a,sum(N.b),sum(N.b)/(datediff(day,min(N.a),M.a) + 1)
    from (select distinct a from 数据表) M, 数据表 N
    where N.a<=M.a 
    group by M.a
      

  7.   

    select t.A, iB AS B, sum(q.B)/(datediff('d',min(q.A),t.A) + 1) as C
    from (select A,sum(B) as iB from tb group by A) s, 
         (select distinct A from tb) t, tb q
    where q.A<=t.A and s.A=t.A
    group by t.A, iB参照 winehero(编程人生)的,这个应该可以了
      

  8.   

    通不过啊.
    我怀疑问题出在from (select distinct a from 数据表) M, 数据表 N
    这句上.
    我试了下,下面这个提示出错(FROM子句语法错误)
    strsql = "select s.* from(select  distinct a from 数据表) s"
      

  9.   

    学习中…………vbman2003(家人)的可以完成你要的东西,他建立的表名为 tb ,改为你的表名 数据表 后就行select t.A, iB AS B, sum(q.B)/(datediff('d',min(q.A),t.A) + 1) as C
    from (select A,sum(B) as iB from 数据表 group by A) s, 
         (select distinct A from 数据表) t, 数据表 q
    where q.A<=t.A and s.A=t.A
    group by t.A, iB
      

  10.   

    通不过啊.
    我怀疑问题出在from (select distinct a from 数据表) M, 数据表 N
    这句上.
    我试了下,下面这个提示出错(FROM子句语法错误)
    strsql = "select s.* from(select  distinct a from 数据表) s"
    ————————————————————————————————
    我的那个经测试(MSSQL)没问题啊
      

  11.   

    不知楼主是用什么数据库。刚才测试了,我的那个在ACCESS下通过。
      

  12.   

    用CURSOR快,比较好理解,写起来轻松,嘿嘿DECLARE TABLE TABLE2 (A DATE,B FLOAT,C FLOAT)DECLARE CURSOR CUR_A AS 
    SELECT A FROM TABLE1 GROUP BY AOPEN CUR_ADECLARE DATE_FIRST DATE
    DECLARE DATE_THIS DATE
    DECLARE SUM_THIS FLOAT
    DECLARE SUM_ALL FLOAT
    DECLARE AVG_B FLOAT
    FETCH NEXT FROM CUR_A INTO DATE_FIRST
    SET DATE_THIS = DATE_FIRST
    WHILE @@FETCHSTATUS = 0 
    BEGIN
       SET SUM_THIS = (SELECT SUM(B) AS SUM_B FROM TABLE1 WHERE A = DATE_THIS)
       SET SUM_ALL  = SUM_ALL + SUM_THIS
       SET AVG_B    = SUM_ALL / (DATEDIFF(DATE_THIS,DATE_FIRST) + 1) 
       INSERT INTO TABLE2
              VALUES ( DATE_THIS,SUM_ALL,AVG_B)
       FETCH NEXT FROM CUR_A INTO DATE_THIS
    END SELECT * FROM TABLE2
      

  13.   

    DECLARE TABLE @TABLE2 (A DATE,B FLOAT,C FLOAT)DECLARE CURSOR CUR_A AS 
    SELECT A FROM TABLE1 GROUP BY AOPEN CUR_ADECLARE @DATE_FIRST DATE
    DECLARE @DATE_THIS DATE
    DECLARE @SUM_THIS FLOAT
    DECLARE @SUM_ALL FLOAT
    DECLARE @AVG_B FLOAT
    FETCH NEXT FROM CUR_A INTO @DATE_FIRST
    SET @DATE_THIS = @DATE_FIRST
    WHILE @@FETCHSTATUS = 0 
    BEGIN
       SET @SUM_THIS = (SELECT SUM(B) AS SUM_B FROM TABLE1 WHERE A = @DATE_THIS)
       SET @SUM_ALL  = @SUM_ALL + @SUM_THIS
       SET @AVG_B    = @SUM_ALL / (DATEDIFF(@DATE_THIS,@DATE_FIRST) + 1) 
       INSERT INTO @TABLE2
              VALUES ( @DATE_THIS,@SUM_ALL,@AVG_B)
       FETCH NEXT FROM CUR_A INTO @DATE_THIS
    END SELECT * FROM @TABLE2
      

  14.   

    不知楼主是用什么数据库。刚才测试了,我的那个在ACCESS下通过。--------------------------------------------------------------
    我用的ACCSEE   97。
    JET 3。51