急!在线等!求助一条通过delphi7控件ADOQuery执行的SQL查询语句(100分)

  • 主题发起人 yzx_lsyh
  • 开始时间
Y

yzx_lsyh

Unregistered / Unconfirmed
GUEST, unregistred user!
1、开发环境为:delphi7,sql2000,所用控件为ADOQuery。
2、表结构:
表名:table1
字段:井号 时间 泵状态
查询条件:在(同一天中),(泵状态为‘开’)且(泵状态为‘开’的次数大于2次)的(离现在最近一天)的记录

说明:1、字段‘时间’中包含年、月、日、时、分、秒;‘泵状态’为开或者关。
2、SQL语句要通过delphi7的ADOQuery执行。

我实在是写不出来,求教各位兄弟姐妹了!在下先谢了![:D]
 
文字说明太过简单,不知道你说的是什么意思。查询出来的格式是什么样的。
 
同意楼上,无法理解,太多条件不确定,无从下手
 
不好意思。我举例说明吧:
table1:
井号 时间 泵状态
1 2008-04-15 14:30:34 开
1 2008-04-15 16:30:34 开
1 2008-04-15 17:30:34 开
1 2008-04-16 17:30:33 开
1 2008-04-16 18:30:33 关
1 2008-04-16 18:30:34 开
1 2008-04-16 19:30:34 开
1 2008-04-17 01:30:34 关
1 2008-04-17 05:30:34 关
1 2008-04-17 07:37:34 开
查询结果应该为:
1 2008-04-16 17:30:33 开
1 2008-04-16 18:30:34 开
1 2008-04-16 19:30:34 开
原因(也即查询条件):
1、‘在同一天中’(即:都为2008-04-16)
2、‘泵状态为:开’(泵状态为:开)
3、‘泵状态为开的次数大于2次’(15、16日满足该条件,17日不满足该条件)
4、‘离当前时间最近的一天’(由于17日不满足条件3,15、16日中16日离当前时间近,所以选16日)

另外,查询结果记录集存于table2中(这个条件应该用:select ...into table2....就可以了)。并且该SQL查询语句要通过delphi7的ADOQuery执行。我实在不知道怎么写。:)
不好意思,我应该说清楚了吧?:)
麻烦各位大侠帮帮忙,如果分不够,我可以把我所有的分都给你。实在是急用!
 
查询结果记录集存于table2中(这个条件用:select ...into table2....就可以)
 
将原表发给我,我来给你作。 QQ:136676485
 
ahfycj你好!我在QQ里给您发送加好友的请求了。麻烦您加我为好友。好多问题要请教:)
。。。还给您发了电子邮件。。。:P:)
 
我也不懂 写得很烂,你看能不能暂时满足你的要求
select top 1 井号,DATEPART(yyyy,时间) 年,DATEPART(mm,时间) 月,DATEPART(dd,时间) 日,Count(泵状态) 次数 from table1
where 泵状态 = '开' and DATEPART(yyyy,时间) <= DATEPART(yyyy,Getdate()) and DATEPART(mm,时间) <= DATEPART(mm,Getdate()) and
DATEPART(dd,时间) <= DATEPART(dd,Getdate())
Group by 井号,DATEPART(yyyy,时间),DATEPART(mm,时间),DATEPART(dd,时间)
having Count(泵状态) >= 2
order by DATEPART(yyyy,时间) desc,DATEPART(mm,时间) desc,DATEPART(dd,时间) desc
 
select *
from table1
left join
(select 井號,convert(varchar(10),時間,121) as Date1
from table1
where 泵狀態 = '開'
group by 井號,convert(varchar(10),時間,121)
having count(*) > 2
) X on Table1.井號 = X.井號 and convert(varchar(10),Table1.時間,121) = X.Date1
 
非常感谢ahfycj!
ahfycj的答案既简洁运行起来速度也快,结果也非常准确!
var
s:string;

begin
s:='select * from stdata15 where left(stime,10)=(select top 1 left(stime,10) as rq from stdata15 where sj15014='+quotedstr('开')+' group by left(stime,10) having count(left(stime,10))>=2 order by left(stime,10) desc)';
adoquery1.SQL.Text:=s;
adoquery1.open;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
884
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部