gpt4 book ai didi

postgresql - 从项目中查找下一行和前一行

转载 作者:行者123 更新时间:2023-11-29 14:08:50 25 4
gpt4 key购买 nike

在一个网络应用程序中,我有一个项目轮播。

<Prev | Item 1 | Item 2 (active) |  Item 3 | Next>

当用户直接访问应预选“项目 2”的页面时 - 我需要前一项和下一项。

所以查询应该类似于“给我第 2 项之前和第 2 项之后的行,并且只有这两个。”

如果用户可以访问该项目,则给定以下带有 id 和 bool 字段的虚拟数据:

CREATE TABLE items (id integer, can_access boolean);

INSERT INTO items SELECT 1,true;
INSERT INTO items SELECT 2,false;
INSERT INTO items SELECT 3,true;
INSERT INTO items SELECT 5,false;
INSERT INTO items SELECT 6,true;

当 id:3 是事件 id - 我想找到 id:1 和 id:6。

最佳答案

使用窗口函数获取所有页面的相对导航,您的查询将如下所示:

SELECT
lag("id") over w AS prev,
id,
lead("id") over w AS next
FROM items
WHERE can_access = true
WINDOW w as (order by id)

给你这些结果:

prev    active    next
-----------------------
NULL 1 3
1 3 6
3 6 NULL

要仅返回 3 的导航,您可以使用中级 CTE:

WITH 
navi(prev, active, "next") AS
(
SELECT
lag("id") over w AS prev,
id,
lead("id") over w AS next
FROM items
WHERE can_access = true
WINDOW w as (order by id)
)
SELECT * FROM navi WHERE active = 3

关于postgresql - 从项目中查找下一行和前一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52740705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com