我想采取类似
的范围SELECT * FROM generate_series(1,5);
generate_series
---------------
1
2
3
4
5
并将其转换为类似
的内容false
false
false
false
true
除非我们在最后一行,否则它总是假的。如果它是0而不是假而1而不是真也可以。
我试过
SELECT floor(gs::float / max(gs))
FROM generate_series(1, 5) AS gs
GROUP BY gs;
但由于某种原因,我只会返回1,我不太确定。
答案 0 :(得分:1)
您可能需要window function:
SELECT
gs,
row_number() OVER (ORDER BY gs DESC) = 1
FROM generate_series(1, 5) AS gs
答案 1 :(得分:1)
它返回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;
答案 2 :(得分:1)
另一个窗口函数:LEAD()
引用 next 行,并且对于最终记录为NULL。
SELECT (lead(gs) OVER www IS NULL) AS is_last
FROM generate_series(1,5) gs(gs)
WINDOW www AS (order by gs)
;