【发布时间】:2024-01-22 07:19:01
【问题描述】:
假设我有这张桌子:
select * from window_test;
k | v
---+---
a | 1
a | 2
b | 3
a | 4
最终我想得到:
k | min_v | max_v
---+-------+-------
a | 1 | 2
b | 3 | 3
a | 4 | 4
但我会很高兴得到这个(因为我可以很容易地用 distinct 过滤它):
k | min_v | max_v
---+-------+-------
a | 1 | 2
a | 1 | 2
b | 3 | 3
a | 4 | 4
是否可以使用 PostgreSQL 9.1+ 窗口函数来实现这一点?我试图了解是否可以让它在此示例中对k=a 的第一次和最后一次出现使用单独的分区(按v 排序)。
【问题讨论】:
-
第一:你想“折叠”完整的范围吗? IE。当您将
(a,5), (a,6), (a,7)添加到您的数据集时,您会期待什么?第二:v总是完美加1还是有差距? -
@A.H.
v并没有完全增加(事实上,它是一个时间戳)。是的,我想折叠完整的范围,并希望(a, 4, 5)作为插入(a, 5)后的最后一个元组。 -
@KonradGarus,提供的任何解决方案都适合您吗?
标签: postgresql common-table-expression window-functions