求获取当前记录的 前一条记录 和后一条句路的 查询语句 (不用变量)

时间:2021-09-01 20:02:15

  因为 需要当前记录的一个字段的值 和前一条记录的这个字段的值 进行比较
  所以 
  求获取当前记录的 前一条记录 和后一条句路的 查询语句
  该表的ID 已经确定为连续增长的 不会出现不连续的情况
  难点 是不要用变量,自定义函数之类的
  希望大家帮帮忙 

6 个解决方案

#1


select 
case when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          >         
          (--前一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id --注意这里是id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )-1
          )
     then '当前记录某字段>前一条记录某字段'    
     when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          =         
          (--前一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )-1
          )
     then '当前记录某字段=前一条记录某字段'   
     when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          <         
          (--前一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )-1
          )
     then '当前记录某字段<前一条记录某字段'
else '前一条某字段为空'     
end 和前一条比较,
case when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          >         
          (--后一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )+1
          )
     then '当前记录某字段>前一条记录某字段'    
     when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          =         
          (--后一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )+1
          )
     then '当前记录某字段=前一条记录某字段'   
     when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          <         
          (--后一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )+1
          )
     then '当前记录某字段<前一条记录某字段'
else '后一条某字段为空'          
end 和后一条比较          
from dual;       

这个应该可以用了,测试过的,改一下表明和字段名还有条件就可以了。

#2


Lead函数是不是可以帮到你呢?

#3


lag() and lead()

#4


谢谢各位 
昨天有事  现在 看看先

#5


select * from table t where t.rowid=(select rowid-1 rowid from table where ...);
这样行不行?

#6


rowid-1?

我蛮佩服楼上的。可以想到这个。
是不是错的离谱了点?

#1


select 
case when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          >         
          (--前一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id --注意这里是id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )-1
          )
     then '当前记录某字段>前一条记录某字段'    
     when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          =         
          (--前一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )-1
          )
     then '当前记录某字段=前一条记录某字段'   
     when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          <         
          (--前一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )-1
          )
     then '当前记录某字段<前一条记录某字段'
else '前一条某字段为空'     
end 和前一条比较,
case when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          >         
          (--后一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )+1
          )
     then '当前记录某字段>前一条记录某字段'    
     when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          =         
          (--后一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )+1
          )
     then '当前记录某字段=前一条记录某字段'   
     when (--当前记录
           select p.colname
           from yourtablename p
           where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
          )
          <         
          (--后一条记录
           select p.colname
          from yourtablename p
          where id=(select p.id
                   from yourtablename p
                   where id=1 --能确定查询到一条记录的条件,而这条记录要是你所谓的当前记录
                   )+1
          )
     then '当前记录某字段<前一条记录某字段'
else '后一条某字段为空'          
end 和后一条比较          
from dual;       

这个应该可以用了,测试过的,改一下表明和字段名还有条件就可以了。

#2


Lead函数是不是可以帮到你呢?

#3


lag() and lead()

#4


谢谢各位 
昨天有事  现在 看看先

#5


select * from table t where t.rowid=(select rowid-1 rowid from table where ...);
这样行不行?

#6


rowid-1?

我蛮佩服楼上的。可以想到这个。
是不是错的离谱了点?