日期:2014-05-18  浏览次数:20464 次

这两条SQL语句怎么合并成一条提高效率
我现在是这么实现的
===================================================
数据表分别有   公司表zs_khinfo   跟踪记录表zs_gzrec
zs_khinfo主要字段:id为主键,cname为公司名称,levels为公司类型
zs_gzrec主要字段:
nexttimegj   作用就是跟踪时间   类型:smalldatetime
fid   作用就是记录公司id   类型:int   可重复
addtime   作用就是记录添加时间   类型:smalldatetime
===================================================
先用一条SQL语句
------------------------
"select   a.id,a.cname   from   zs_khinfo   a,zs_gzrec   b   where   datediff(day,b.nexttimegj,getdate())=0   and   a.id=b.fid   and   a.levels <> 'O '   order   by   b.addtime   desc "
------------------------
------------------------
读出所有符合条件的公司表里的字段并要符合跟踪表里的跟踪时间有今天
"datediff(day,nexttimegj,getdate())=0 "   并按b.addtime来顺序

然后通过程序循环中
单独读出跟踪表的字段,按时间顺序,只读一条
------------------------
"select   visitrec,nexttimegj   from   [zs_gzrec]   where   fid= "&Rs(0)& "   order   by   addtime   desc "
------------------------
------------------------
这里的RS(0)就是上面对应公司表的ID
一个公司一般在跟踪表里有N个fid,我在这里用order   by   addtime   desc只取了最新的一条,并不一定就是跟踪时间为今天的那一条,这里排序的关键就是addtime,跟踪时间只是用来判定是否显示该公司信息的重要依据,就是该公司必须有一条符合 "datediff(day,nexttimegj,getdate())=0 ",真正显示出来的并非一定是这条信息,是这个公司的最新添加的信息.
***********************************************************************
这样写程序才正确,但是效率很低,打开要20多秒,可以参考这两个语句来综合一下
我也曾经综合过多次,语句如下,但是有问题:
select   c.id,c.cname,d.visitrec,d.nexttimegj,d.addtime  
from   zs_khinfo   c,zs_gzrec   d  
where   datediff(day,d.nexttimegj,getdate())=0   and   c.levels <> 'O '   and   c.id=d.fid
order   by   d.addtime   desc
得到的是符合datediff(day,d.nexttimegj,getdate())=0的那一条记录,而不是该条信息fid所对应公司的最新跟踪记录!
-------------------------------------------
请高手帮忙看一下!!

------解决方案--------------------
--把@t1 改成 zs_khinfo
--@t2 改成 zs_gzrec
select c.id,c.cname,c.levels,d.visitrec,d.nexttimegj,d.addtime
from zs_khinfo c
join zs_gzrec d on c.id=d.fid and c.levels=1
join (select fid ,max(addtime) addtime from zs_gzrec group by fid) e on c.id=e.fid and d.addtime=e.addtime
join (select distinct fid from zs_gzrec where datediff(day,nexttimegj,getdate())=0) f on c.id=f.fid order by c.id