gpt4 book ai didi

postgresql - 对 Greenplum 中的表列进行解聚合

转载 作者:行者123 更新时间:2023-11-29 12:18:53 25 4
gpt4 key购买 nike

我正在使用 Greenplum,我有这样的数据:

 id | val 
----+-----
12 | 12
12 | 23
12 | 34
13 | 23
13 | 34
13 | 45
(6 rows)

不知何故我想要这样的结果:

 id | step 
----+-----
12 | 12
12 | 11
12 | 11
13 | 23
13 | 11
13 | 11
(6 rows)

它是怎么来的:

首先应该有一个Window函数,它根据partition by id执行de-aggreagte函数

val列是累计值,我要获取的是步长值。

也许我可以这样做:

select deagg(val) over (partition by id) from table_name;

所以我需要 deagg 函数。

感谢您的帮助!

P.S 和 Greenplum 基于 postgresql v8.2

最佳答案

您可以只使用LAG 函数:

SELECT id,
val - lag(val, 1, 0) over (partition BY id ORDER BY val) as step
FROM yourTable

请注意 lag() 有三个参数。第一个是查找滞后的列,第二个表示查看以前的记录,第三个将导致 lag 返回默认值零。

这是一个显示此查询将生成的表的表:

 id | val | lag(val, 1, 0) | val - lag(val, 1, 0)
----+-----+----------------+----------------------
12 | 12 | 0 | 12
12 | 23 | 12 | 11
12 | 34 | 23 | 11
13 | 23 | 0 | 23
13 | 34 | 23 | 11
13 | 45 | 34 | 11

第二个注意事项:此答案假定您要按 val 升序计算滚动差异。如果您想要不同的顺序,您可以更改分区的 ORDER BY 子句。

关于postgresql - 对 Greenplum 中的表列进行解聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37745231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com