我想从数组中滤除连续发生的值。
我尝试过使用“ array_distinct”和“ transform”函数,但是无法进行。由于array_distinct仅给出了不同的值,而不是我所期望的
Input : [1,2,2,3,4,4,4,2]
预期输出:[1,2,3,4,2]
答案 0 :(得分:6)
您可以通过组合ngrams
,filter
,transform
来检查连续的元素,如下所示:
presto> SELECT
-> ARRAY[a[1]] ||
-> transform(
-> filter(
-> ngrams(a, 2),
-> pair -> pair[1] IS DISTINCT FROM pair[2]),
-> pair -> pair[2])
-> FROM (VALUES ARRAY[1,2,2,3,4,4,4,2]) t(a);
_col0
-----------------
[1, 2, 3, 4, 2]
(1 row)
说明:
ngrams(a, 2)
建立同级对filter
仅保留未由相同元素继续的元素;与普通IS DISTINCT FROM
相比,NULL
用于=
更友好的比较。transform
用于将兄弟姐妹转换回平面数组有关所有可用的数组函数,请参见https://prestosql.io/docs/current/functions/array.html。
答案 1 :(得分:1)