Я просмотрел документацию массива в Big Query и обнаружил, что могу использовать UNNEST и DISTINCT для удаления дубликатов в содержимом массива, но я хочу удалить дубликаты, только если они находятся рядом в массиве (так как это упорядоченный список) .
Например, для этого ввода:
[a, a, b, a, a, c, b, b]
Ожидаемый результат:
[a, b, a, c, b]
Любые идеи приветствуются.
Используйте подход ниже
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;
Результаты запроса