您的位置:程序门 -> vb -> 数据库(包含打印,安装,报表)



这样的sql语句写法,找出符合要求的记录,内详.


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


这样的sql语句写法,找出符合要求的记录,内详.
发表于:2007-01-22 10:24:07 楼主
字段:id\部门\车站\设备名称\设备型号\设备编号\检查人\检查日期
id为自动编号关键字,部门\设备编号\检查日期可以确定唯一的记录(也就是说同一个部门,同一个设备编号在某一个检查日期只会存在一条记录).
比如现在我想找出该设备编号在最大的检查日期的数据,怎样写sql语句会方便些.

equipinfo表如下:
id\部门\车站\设备名称\设备型号\设备编号\检查人\检查日期
1\第一车间\上海站\变压器\byq-1\012\张山\2001-1-1
2\第二车间\上海站\变压器\byq-3\011\里四\2002-3-4
3\第二车间\北京站\电阻\dz-13\146\里四\2006-1-4
4\第二车间\湖动站\变压器\byq-3\011\小王\2004-6-4
5\第一车间\上海站\变压器\byq-1\012\万二\2003-10-2
6\第一车间\杭州站\电源组\dy-3\123\刘校庆\2003-9-12
7\第一车间\南昌站\电源组\dy-3\123\万发\2005-11-2
需要得到的结果是:
3\第二车间\北京站\电阻\dz-13\146\里四\2006-1-4
4\第二车间\湖动站\变压器\byq-3\011\小王\2004-6-4
5\第一车间\上海站\变压器\byq-1\012\万二\2003-10-2
7\第一车间\南昌站\电源组\dy-3\123\万发\2005-11-2

我分成了两步骤解决,先生成临时表temp
select   设备编号,   max(检查日期)   as   最近检查日期   into   temp
from   status
group   by   部门,   器材编号
第二
select   equipinfo.*
from   equipinfo,   temp
where   equipinfo.部门=temp.部门   and   equipinfo.设备编号=temp.设备编号   and   equipinfo.检查日期=temp.最近检查日期

能否一步搞定???如何解决

发表于:2007-01-22 21:51:471楼 得分:0
想不到这个sql语句这么难!    
下面的这个sql语句针对于你当前给出的数据是准确的,不知道在其它情况下是否准确:

select   *
from   equipinfo   a1
where   (检查日期   in
                    (select   max(检查日期)
                  from   equipinfo   as   a2
                  where   a1.设备编号   =   a2.设备编号
                  group   by   设备编号))
发表于:2007-01-22 21:53:582楼 得分:0
再次测试,仍然没有问题
发表于:2007-04-16 08:43:593楼 得分:0
可以
发表于:2007-04-16 11:09:504楼 得分:0
select   *
from   equipinfo  
where  
select   not   exists
(select   1   from   temp
where   equipinfo.部门=temp.部门   and   equipinfo.设备编号=temp.设备编号   and   equipinfo.检查日期 <检查日期)
发表于:2007-04-17 10:28:035楼 得分:0
你的兩步可以整合為一步,另外用這種方法,比用子查詢的效率更優

select   a.*
from   equipinfo   a,  
(select   设备编号,   max(检查日期)   as   最近检查日期
from   status
group   by   部门,   器材编号)   b
where   a.部门=b.部门   and   a.设备编号=b.设备编号   and   a.检查日期=b.最近检查日期


快速检索

最新资讯
热门点击