这个问题可能比较简单,各位大虾别笑话啊>_<
现有一个流量表FTReal,字段是时间(datetime)和各个流量计的流量。(顺便问下,这个表设计的合理不合理啊,要不要加个KEY ID?)数据是每过30分钟左右增加一条,可能为空。
我现在想算的是日累积流量FTDay,也就是计算第二天早上8点和第一天早上8点后的第一条非空记录的差,请问应该如何来实现呢? 
我想问下,能建立一个表来实现这功能么?如果不能的话那我应该怎么做呢?
先谢过各位了。

解决方案 »

  1.   


    select a.流量-
    (select top 1 流量 from FTReal
    where datediff(day,时间,a.时间)<=1
    and 流量 is not null
    order by 时间)
    from FTReal a
      

  2.   

    1、应该加一个KEYID,否则你如何区分流量是哪个表的?
    2、用一个sql语句就可以解决:
        select max(流量)-min(流量) from 流量表 group by KEYID where 时间范围
      

  3.   

    to ljs1519():
    我的也是为了实现它的需求嘛  需要是8点以后非空流量,这两点你都没有实现...
    不过我的是要改改.
      

  4.   

    declare @a varchar(100)
    declare @b varchar(100)set @a=convert(varchar(11),getdate(),120) +'08:00:00'
    set @b=convert(varchar(11),getdate()-1,120) +'08:00:00'
    select top 1 FTreal from 表 where convert(varchar,datetime,120)>@a and ftreal is not null order by datetime
    -
    select top 1 FTreal from 表 where convert(varchar,datetime,120)>@b and ftreal is not null order by datetime
      

  5.   

    to chuifengde:
    您最后两句好像有点错误啊,运行不了。TO LJS1519:
    流量表是根据数据采集到的时间来生成的,一个流量计的流量就是一个列。
    然后还有个问题,就是如果按照上面各位说的建立了这个FTDAY表,那是不是得设置为每天运行一次?
      

  6.   

    declare @c table([datetimef] datetime,ftreal decimal(13,4))insert @c select '2006-09-06 08:00:12',234.344
    union all select '2006-09-05 08:00:12',23.23948
    union all select '2006-09-06 08:00:18',523.342declare @a varchar(100)
    declare @b varchar(100)set @a=convert(varchar(11),getdate(),120) +'08:00:00'
    set @b=convert(varchar(11),getdate()-1,120) +'08:00:00'
    select
    (select top 1 FTreal from @c where convert(varchar,[datetimef],120)>@a and ftreal is not null order by [datetimef])
    -
    (select top 1 FTreal from @c where convert(varchar,[datetimef],120)>@b and ftreal is not null order by [datetimef])