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

这条SQL语句该怎么写
我写的如下:
语句一:
select   c.id,cname,area,levels,c.site,c.uid,work_no,visitrec,qm,nexttimegj,d.addtime  
from   zs_khinfo   c,zs_gzrec   d  
where  
c.id   in   (select   fid   from   zs_khinfo   a,zs_gzrec   b   where   b.fid=a.id   and   datediff(day,nexttimegj,getdate())=0  
and   levels <> 'O ')   and   c.id=d.fid     order   by   d.addtime   desc
语句二:
select   c.id,cname,area,levels,c.site,c.uid,work_no,visitrec,qm,nexttimegj,d.addtime  
from   zs_khinfo   c,zs_gzrec   d  
where   nexttimegj   in   (select   Max(nexttimegj)   from   zs_khinfo   a,zs_gzrec   b   where   b.fid=a.id   and   levels <> 'O '   Group   By   fid)   and   c.id=d.fid   and   levels <> 'O '   order   by   d.addtime   desc


功能说明:
数据表分别有   公司表zs_khinfo   跟踪记录表zs_gzrec
主要字段:nexttimegj   作用就是跟踪时间   类型:smalldatetime
每个公司都有N条跟踪记录,比如:   某公司   跟踪时间有   13号   15号   17号
比如今天到了15号,就应该显示这个公司信息出来,但是所显示出来的信息必须是这个公司的最新信息,也就是17号的,而不是15号的,如果现在又填了一条,就应该马上显示这一条信息,按照添加时间顺序来显示最新一条,但是有一个条件必须得满足,就是跟踪时间必须符合   我所填的公司记录中的跟踪时间   如果跟踪时间有   13号   15号   17号,今天是15号,就可以显示该公司最新的信息,如果16号就不需要显示
这条SQLSERVER语句该如何写,可以参照我上面的语句的表和字段,谢谢!!


------解决方案--------------------
LEFT JOIN 一下,再WHERE 过滤一下时间就OK了.