从 Postgresql 视图中获取下一条记录

Posted

技术标签:

【中文标题】从 Postgresql 视图中获取下一条记录【英文标题】:Get the next record from Postresql view 【发布时间】:2014-10-04 13:37:20 【问题描述】:

我根据自己的要求创建了一个视图someView

ID  |   name
3   |    A
4   |    F
8   |    G
13  |    E
26  |    Z

当我在 where 条件下传递 ID 时,我需要从视图中获取下一条记录 IE。如果我通过 4 我应该回到 8 。此外,如果我通过最后一个 ID,它应该返回第一条记录 IE。如果我通过 26,我应该回到 3。

我一直在尝试使用滞后和领先,但没有任何效果。我也试过这个

DECLARE aaa SCROLL CURSOR FOR SELECT ID FROM someView where ID > someValue;
fetch 1 from aaa

在这种情况下,我确实得到了下一个值,但如果我传递最后一个 ID,它不会得到结果。 那我该怎么办??有没有其他方法可以解决我的问题?

提前致谢。

【问题讨论】:

这真是一个奇怪的要求。 我需要分配任务。因此,当我获得最后分配的人的 ID 时,任务会自动分配给下一个人。所以在它到达桌子上的最后一个人之后,它应该回到第一个人。现在这很奇怪吗?? 好的。您的ID 列值是否如帖子中所示?或者它们是自动递增的?只是想确认 ID 列值是否遵循任何模式。 它们是自动递增的。但是既然是视图,根据其他要求ID可能不是升序的。所以这里它不遵循任何模式 【参考方案1】:

类似这样的:

with next_entry as (
   select *
   from sometable
   where id > 26 -- change the desired value here 
   order by id
   limit 1
)
select *
from next_entry
union all
select *
from sometable
where not exists (select 1 from next_entry)
limit 1;

它可能不是很有效,但应该可以。

【讨论】:

@a 查询工作不正常。在随机情况下,它会给出像这样的错误结果sqlfiddle.com/#!15/32278/6 @Pradnya:抱歉,我忘记了 CTE 中的 order by

以上是关于从 Postgresql 视图中获取下一条记录的主要内容,如果未能解决你的问题,请参考以下文章

如何从 sql 查询中获取第一条和最后一条记录?

SQL如何获取上一条..下一条..首尾记录...

Mysql 查询当前数据上一条和下一条的记录

如何获取SQL查询当前数据上一条和下一条的记录?

mysql获取上一条和下一条记录id

如何获取SQL表中的下一条记录