一个比较复杂的查询,包含连续性要求等,请大家帮忙看看(50)

  • 主题发起人 主题发起人 laobalu
  • 开始时间 开始时间
L

laobalu

Unregistered / Unconfirmed
GUEST, unregistred user!
表结构如下recno fdate ftime condition1 condition2 ... 1 1980-1-1 1 yes yes ...2 1980-1-1 2 yes no ...3 1980-1-1 3 no no ...... ....... .. .. .. ...... 1980-1-1 24 .. .. ...... 1980-1-2 1 .. .. ... ... ....... .. .. .. ...... 1980-1-2 24 .. .. ...... ...... .. .. .. ...... 1980-1-31 1 .. .. ...... ...... .. .. .. ...recno字段是自增1的,主键。fdate是日期,顺序的,有几十年的资料。ftime是从1-24时。后面都是判断条件字段,yes和no是随机的,没有规律。查询要求是:用户给定日期范围,查询满足某条件的日数有多少?时间范围和连续小时数都是查询参数。比如说:要查询1980-1-1到1990-1-1的1点-10点内,有连续4个小时满足条件(condition1=yes and condition2=no)的天数有多少天?我想了半天,这个连续N个小时实在不知道怎么弄。。谢谢大家。
 
我在想你的1980-1-1这一天的24个小时就24行是不是定好的?如果是每天固定24行,那么你就查出来所有的小时在1-10之间和(condition1=yes and condition2=no)的数据,然后根据recno判断是不是连续的是不是就可以了呢?最后这个判断自增列是不是连续的还得想想办法
 
连续4个小时 是什么意思
 
办法是有的,不过麻烦,可以自己建个临时表,然后写程序进行判断,下下策
 
连续4小时的意思就是在指定的时间范围内,有连续4个小时满足用户给出的条件。比如2、3、4、5这个4个小时满足,那么这一天就算符合条件的一天。
 
用DELPHI循环生成个SQL语句,执行一下就可以了。大致说一下:先声明几个变量:开始日期,结束日期,开始时间,结束时间,条件一,条件二。为了简化以后的写法,预定义一个语句块:select * from 表 where fdate between 开始日期 and 结束日期 and ftime between 开始时间 and 结束时间 and condition1=条件一 and condition2=条件二接下来,就要用DELPHI进行循环了,因为这要判断连续几个小时,假如是N个小时(N>=2)。var s: string;begin s:=s+'select distinct a1.fdate from 语句块 a1 '; for i:=2 to N do begin s:=s+' inner join 语句块 a'+inttostr(i)+' on a1.fdate=a'+inttostr(i)+'.fdate and a1.ftime=a'+inttostr(i)+'.ftime-'+inttostr(i-1) ; end; adoquery1.close; adoquery1.sql.text:=s; adoquery1.open;end;大致这样就可以出结果了,我没环境试,你可以试试看。如果不想用DELPHI,用存储过程也可以。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
850
import
I
I
回复
0
查看
501
import
I
后退
顶部