因为 需要当前记录的一个字段的值 和前一条记录的这个字段的值 进行比较
所以
求获取当前记录的 前一条记录 和后一条句路的 查询语句
该表的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;
这个应该可以用了,测试过的,改一下表明和字段名还有条件就可以了。
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;
这个应该可以用了,测试过的,改一下表明和字段名还有条件就可以了。
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?
我蛮佩服楼上的。可以想到这个。
是不是错的离谱了点?
我蛮佩服楼上的。可以想到这个。
是不是错的离谱了点?