【问题标题】:Presto - How can i filter array values that are occurring consecutivelyPresto - 我如何过滤连续出现的数组值
【发布时间】:2019-11-07 04:15:13
【问题描述】:

我想从数组中过滤掉连续出现的值。

我尝试在 presto 中使用“array_distinct”和“transform”功能,但无法进行。由于 array_distinct 只给出不同的值,而不是我所期望的

Input : [1,2,2,3,4,4,4,2]

预期输出:[1,2,3,4,2]

【问题讨论】:

    标签: arrays presto


    【解决方案1】:

    您可以通过组合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://trino.io/docs/current/functions/array.html 了解所有可用的数组函数。

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 2021-01-04
      相关资源
      最近更新 更多