sqlserver2000中的查询,查询@h小时前的平局值
declare @h  integer
set @h=-1
select avg(tag1)as avgtag1,avg(tag2)as avgtag2
from table1
where datetime between dateadd(hour,@h,getdate()) and getdate()
我用一个spinedit,在spinedit中输入查询的时间条件:
h:=strtoint(spinedit1.text);
可是我不知道query1.sql中该怎么写,请大家指点
query1.sql.add('select avg(tag1)as avgtag1,avg(tag2)as avgtag2
from table1 ');
query1.sql.add('....')

解决方案 »

  1.   

    没必要写这么多。
    SQL.Text := Format(
      'select avg(tag1)as avgtag1,avg(tag2)as avgtag2 '+
      'from table1 '+
      'where datetime between dateadd(hour,%s,getdate()) and getdate()',
      [spinedit1.text]);
      

  2.   

    不行啊,运行时提示在between附近有语法错误
      

  3.   

    1,先求出h小时前的时间 t1。
    Unit
    DateUtils;var t1,t2:Tdatetime;
    h: integer;//几个小时前;
    t2:=date;  //当前时间;
    h:=strtoint(speinedit1.text)
    t1:=IncHour(t2,h);  //h小时前的时间
    2.查处记录:
    query1.close;
    query1.sql.clear;
    query1.sql.add(''select avg(tag1)as avgtag1,avg(tag2)as avgtag2'+
    ' from table1'+
    ' where datetime between'''+datetostr(t1)+''''+
    ' and '''+datetostr(t2)+'''');
    query1.open;
      

  4.   

    对了,t1:=IncHour(t2,h);  中,h可以为正(之后),也可以为负数(之前)
      

  5.   

    或许datetime是SQL的关键字,你加上中括号给它[datetime].
    SQL.Text := Format(
      'select avg(tag1)as avgtag1,avg(tag2)as avgtag2 '+
      'from table1 '+
      'where [datetime] between dateadd(hour,%s,getdate()) and getdate()',
      [spinedit1.text]);