SQL2005
表TB1存在一下几种情况:
1、
ID AID BID CID CHECKTIME
001 001 NULL NULL 12:12:00
001 002 NULL NULL 09:12:00
001 003 NULL NULL 07:12:00查询结果:
ID AID BID CID CHECKTIME
001 001 002 003 12:12:00
2、
ID AID BID CID CHECKTIME
001 001 002 003 12:12:00
001 002 NULL NULL 09:12:00
001 003 NULL NULL 07:12:00查询结果:
ID AID BID CID CHECKTIME
001 001 002 003 12:12:00
3、
ID AID BID CID CHECKTIME
001 001 002 NULL 12:12:00
001 003 NULL NULL 09:12:00
001 003 NULL NULL 07:12:00查询结果:
ID AID BID CID CHECKTIME
001 001 002 003 12:12:00
表TB1存在一下几种情况:
1、
ID AID BID CID CHECKTIME
001 001 NULL NULL 12:12:00
001 002 NULL NULL 09:12:00
001 003 NULL NULL 07:12:00查询结果:
ID AID BID CID CHECKTIME
001 001 002 003 12:12:00
2、
ID AID BID CID CHECKTIME
001 001 002 003 12:12:00
001 002 NULL NULL 09:12:00
001 003 NULL NULL 07:12:00查询结果:
ID AID BID CID CHECKTIME
001 001 002 003 12:12:00
3、
ID AID BID CID CHECKTIME
001 001 002 NULL 12:12:00
001 003 NULL NULL 09:12:00
001 003 NULL NULL 07:12:00查询结果:
ID AID BID CID CHECKTIME
001 001 002 003 12:12:00
from tb
order by checktime desc
查询的结果是只有一条记录。
这个语句只能查询最理想状态下,即AID,BID,CID都不为NULL时的记录。
比如说,如果CID=NULL,则用比这条记录早的记录的AID填充。ID AID BID CID CHECKTIME
001 001 002 NULL 12:12:00
001 003 NULL NULL 09:12:00
001 003 NULL NULL 07:12:00 这种情况,CHECKTIME =‘12:12:00’时,CID=NULL,所以结果的
CID=AID WHERE CHECKTIME =‘12:12:00’查询结果为:
ID AID BID CID CHECKTIME
001 001 002 003 12:12:00
ID AID BID CID CHECKTIME
001 001 NULL NULL 12:12:00
001 002 003 NULL 09:12:00
001 001 NULL NULL 07:12:00 查询结果:
ID AID BID CID CHECKTIME
001 001 002 003 12:12:00 请注意结果中的CID的值等于第二条记录的BID.
1、
ID AID BID CID CHECKTIME
001 001 NULL NULL 12:12:00
001 002 NULL NULL 09:12:00
001 003 NULL NULL 07:12:00 查询结果:
ID AID BID CID CHECKTIME
001 001 002 003 12:12:00 结果应该是如下两个中的一个才对.ID AID BID CID CHECKTIME
001 001 002 002 12:12:00 ID AID BID CID CHECKTIME
001 001 003 003 12:12:00
declare cur cursor fast_forward for
select id,name from a;
open cur;
fetch next from cur into @id,@name;
while @@fetch_status=0
begin
--做你要做的事
fetch next from cur into @id,@name;
end
close cur;
deallocate cur;
from tb
order by checktime desc
--把第二晚的checktime的aid 作为bid into到#dselect top 1 bid as cid into #e from tb a where exists (select 1 from tb where a.checktime < checktime) order by checktime desc
--把第二晚的checktime的bid 作为cid into到#eselect id,aid,isnull(bid,(select bid from #d ) ) ,isnull(cid,(select cid from #e)) ,checktime from tb a where not exists (select 1 from tb where a.checktime < checktime)
--把最晚时间的记录select出来,并把bid和cid为null的替换成第二晚时间的aid和bid当然,第二晚的记录的那2个字段值不能为null才行。。
top 1 *
from
tb
order by
checktime
desc