首页 > 解决方案 > 从连接的字符串中删除顺序重复

问题描述

我正在运行一个查询,它将整个会话中采取的操作连接到一个字符串中,将每次点击减少到(页面浏览或事件)/(页面或事件类型)

然后它将它们放入一个大长字符串中

Pageview / a >>> Pageview / b

问题是目前我得到了很多字符串

Pageview /a >>> Pageview /a >>> Pageview /a >>> Event / b >>> Pageview /a >>> Pageview /a

这是网站上的预期行为,而不是我正在寻找的输出。

我要做的是删除顺序重复,但如果会话中的两个不同点发生相同的网页浏览,则不删除。因此,在上面的示例中,它将变为:

Pageview /a >>> Event / b >>> Pageview /a

对于一些额外的上下文,我无法控制原始输入的形状,但我可以调整数据的连接方式。因此,如果这更直接,我可以在连接发生之前进行此删除

标签: sqlgoogle-bigquery

解决方案


事后,您可以通过执行以下操作从字符串中删除相邻的重复项:

  • 将字符串拆分为数组
  • 将数组展开为表格
  • 寻找不同的相邻值
  • 重新聚合为字符串

在 BigQuery 中,这是:

select (select string_agg(s.s, ' >>> ')
        from (select s, lag(s) over (order by n) as prev_s
              from unnest(split(str, ' >>> ')) s with offset n
             ) s
        where s.prev_s is null or s.prev_s <> s.s
       ) 
from (select 'Pageview /a >>> Pageview /a >>> Pageview /a >>> Event / b >>> Pageview /a >>> Pageview /a' as str
     ) x

正如我在评论中提到的,您可能应该在原始查询中执行此操作。如果您需要这方面的帮助,请提出一个问题(此问题已得到解答)。

此外,您可能应该习惯于使用数组。它们通常比字符串更强大。


推荐阅读