【发布时间】:2017-04-09 08:01:36
【问题描述】:
我正在尝试在 postgresql 中使用一个查询,该查询可以根据用于某些分页的起始记录 ID 获取上一个和下一个 X 条记录。只获得 1 下一个或上一个并不难,但这不是我需要的。
我发现了一些很接近的查询,但我对 PostgreSQL 查询的了解不够,无法执行这些类型的复杂查询。
下面的这个查询我尝试并更改为工作,但似乎只带回了 ID 的前一项和下一项以及 所有 记录。
但我需要能够为它提供一个起点,例如在WHERE 子句中提供一个 ID,并且如果它们存在,则只能获得 10 条上一条和 10 条下一条记录。这可以单独在 sql 中完成吗?
SELECT
m.med_id AS id,
coalesce(
LEAD(m.med_id) OVER (ORDER BY m.med_id DESC),
(select med.med_id from media as med order by med.med_id desc limit 1)
) AS nextitemid,
coalesce(
LAG(m.med_id) OVER (ORDER BY m.med_id DESC),
(select med.med_id from media as med order by med.med_id asc limit 1)
) AS previtemid
FROM media m
WHERE m.post_type = 1
ORDER BY m.med_id DESC LIMIT 20;
任何帮助都将不胜感激,它可以是任何类型的 sql 解决方案来实现这一点。
我相信所需的输出来自一个示例,即 100 个项目,以 50 作为查询中提供的 ID 起点。
|previtemids|nextitemids|
49 51
48 52
47 53
46 54
45 55
44 56
43 57
42 58
41 59
40 60
我已经接近但无法在一次查询中得到它。与我的场景接近的答案比通用答案更有帮助。
【问题讨论】:
-
您想要列中的 10 条上一条和 10 条下一条记录,还是每条记录单独一行?
-
嗯,好问题@Alex 我将把它从 PHP 读取到一个数组中。也许列可能更容易?
-
您能否发布一个您想要的输出示例?
-
@alex 我提供了一个例子
-
我收回了。它几乎可以工作,但还不够
标签: sql postgresql postgresql-9.1