【发布时间】:2021-03-16 11:44:19
【问题描述】:
我在 postgres 窗口函数中使用多个 order by 时遇到问题。这是一个简短的例子。从单个查询中选择总行数、N 第一行和 N 最后一行。 (这不是我想要完成的任务,只是问题的一个例子) 它是预期的行为还是 postgres 中的错误?我正在使用 postgres 9.6
select generate_series(1, 10) id
into q;
select
count(*) over (),
lag(id , 0) over (order by id asc) a,
lag(id , 0) over (order by id desc) d
from q
limit 5;
输出:
10,10,10
10,9,9
10,8,8
10,7,7
10,6,6
预期:
10,1,10
10,2,9
10,3,8
10,4,7
10,5,6
如果只选择前 N 行或只选择最后 N 行,则代码运行良好。
【问题讨论】:
-
您需要使用带有“over”的窗口或聚合函数。 'id over (order by id)' 不是有效的 sql
-
lag(...,0)是一个无操作的操作。为什么排序顺序很重要?
标签: postgresql