我现在是这么实现的
===================================================
数据表分别有 公司表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所对应公司的最新跟踪记录!
-------------------------------------------
请高手帮忙看一下!!
------解决方案--------------------
[email protected] 改成 zs_khinfo
[email protected] 改成 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