当前位置: 代码迷 >> Sql Server >> 用什么步骤可以让这个过程用一条SQL语句完成
  详细解决方案

用什么步骤可以让这个过程用一条SQL语句完成

热度:58   发布时间:2016-04-24 10:04:27.0
用什么方法可以让这个过程用一条SQL语句完成
如题,我有一堆记录,其中有一个字段是时间日期型,现在,我要在里面,找出两条记录,条件为:
大于当前时间的第一条记录 和 小于当前时间的第一条记录。

我现在是用两条语句做这个工作,类似:

表名: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])

------解决方案--------------------
引用:
影响大啊……我现在里面有一万条数据,当使用第二条语句,从上往下查找时,居然要将近一秒钟……这个表每天增加500条数据,时间长了,不敢想象

你要看下执行计划到底哪个步骤开销比较大,猜测是因为你有排序,但你没有索引导致
  相关解决方案