Отличается от массива в Big Query с изюминкой (только если рядом)

Я просмотрел документацию массива в Big Query и обнаружил, что могу использовать UNNEST и DISTINCT для удаления дубликатов в содержимом массива, но я хочу удалить дубликаты, только если они находятся рядом в массиве (так как это упорядоченный список) .

Например, для этого ввода:

[a, a, b, a, a, c, b, b]

Ожидаемый результат:

[a, b, a, c, b]

Любые идеи приветствуются.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте подход ниже

select *, array( 
  select any_value(el)
    from (
      select as struct *, countif (flag) over(order by offset) grp
      from (
        select offset, el, ifnull(el != lag(el) over(order by offset), true) flag
        from t.arr as el with offset
      )
    )
    group by grp
    order by min(offset)
  )
from your_table t           

если применяется к выборочным данным в вашем вопросе - вывод

Ответ принят как подходящий

Вы можете рассмотреть другой подход, используя операцию набора.

WITH sample_data AS (
  SELECT ['a', 'a', 'b', 'a', 'a', 'c', 'b', 'b'] arr
)
SELECT *,
       ARRAY(
         SELECT e FROM (
            SELECT e, o FROM t.arr e WITH offset o
            EXCEPT DISTINCT
            SELECT e, o + 1 FROM t.arr e WITH offset o
         ) ORDER BY o
       ) AS distinct_arr
  FROM sample_data t;

Результаты запроса

Другие вопросы по теме