我想参加
之类的范围SELECT * FROM generate_series(1,5);
generate_series
---------------
1
2
3
4
5
并将其变成看起来像
的东西false
false
false
false
true
除非我们在最后一行,否则它总是是错误的。如果是0而不是false,而1而不是true也可以。
我尝试了
SELECT floor(gs::float / max(gs))
FROM generate_series(1, 5) AS gs
GROUP BY gs;
但这仅出于某种原因返回1,我不确定。
您可能想要一个窗口函数:
SELECT
gs,
row_number() OVER (ORDER BY gs DESC) = 1
FROM generate_series(1, 5) AS gs
它返回1,因为您总是将数字本身划分。max(gs)
不做您的想法,因为您正在按gs
进行分组。
您可以简单地使用last_value
窗口函数来获取想要的东西,例如:
SELECT
(gs = last_value(gs) over()) AS result
FROM
generate_series(1,5) gs;
或如果您想要最大值(不一定是最后一个 - 可能是单个名字(:
SELECT
(gs = max(gs) over()) AS result
FROM
generate_series(1,5) gs;
又一个窗口函数: LEAD()
指的是 next row,对于最终记录而言是无效的。
SELECT (lead(gs) OVER www IS NULL) AS is_last
FROM generate_series(1,5) gs(gs)
WINDOW www AS (order by gs)
;