如题,我有一堆记录,其中有一个字段是时间日期型,现在,我要在里面,找出两条记录,条件为:
大于当前时间的第一条记录 和 小于当前时间的第一条记录。
我现在是用两条语句做这个工作,类似:
表名:a
时间字段:p
当前时间:now
//找出小于当前时间的第一条记录
select top 1 * from a where datediff('n','now',p)<=0 order by p desc
//找出大于当前时间的第一条记录
select top 1 * from a where datediff('n','now',p)>0 order by p asc
请问有什么方法,可以用一条语句完成这个工作??
------解决方案--------------------
select top 1 ROW_NUMBER() Over(ORDER BY p desc), * from a where datediff('n','now',p)<=0
union all
select top 1 ROW_NUMBER() Over(ORDER BY p asc),* from a where datediff('n','now',p)>0
------解决方案--------------------
select *
from a t1
where not exists(select 1
from a t2
where t2.p between [now] and t1.p)
or not exists(select 1
from a t2
where t2.p between t1.p and [now])
------解决方案--------------------
你要看下执行计划到底哪个步骤开销比较大,猜测是因为你有排序,但你没有索引导致