【发布时间】:2022-01-12 11:15:39
【问题描述】:
在PostgreSQL 文本array 中,我想删除连续的相同值。 distinct 是不够的,因为我可以有重复的值但不是连续的,我想保留它们。值的顺序很重要。
例如
SELECT ARRAY['A', 'B', 'C', 'C', 'D', 'A'];
应该返回{A,B,C,D,A}
-- 编辑
正如@MkSpring Mk 所说,这个post 提出了一个答案。我尝试适应它:
WITH q_array AS (
SELECT ARRAY['A', 'B', 'C', 'C', 'D', 'A'] AS full_array
), q_unnest AS (
SELECT
unnest(full_array) AS unnest_array
FROM q_array
), q_id AS (
SELECT
row_number() OVER () AS id,
unnest_array
FROM q_unnest
)
SELECT
array_agg(q_id.unnest_array) AS array_logical
FROM (SELECT q_id.*, lag(q_id.unnest_array) OVER (ORDER BY q_id.id) AS unnest_array_logical FROM q_id) q_id
WHERE unnest_array_logical IS DISTINCT FROM q_id.unnest_array
我觉得这个语法很冗长,可能是我的方法不够高效。
这个语法可以吗?创建函数是最佳实践还是可以直接在查询中编写?
【问题讨论】:
-
部分是因为在我的配置中我没有本地 ID 列。而且我还问将它写在查询或专用函数中是否是一种好习惯。
标签: arrays postgresql