USER ID string_col
100001 Here
100001 there
100001 Apple
200002 this is
200002 that is
200002 Apple
200002 Cell 4

这是我的原始表&我想使用单词"Apple"作为触发词, for each 用户ID连接上面的所有内容.

下表是我要查找的输出:

USER ID string_col Result
100001 Here null
100001 there null
100001 Apple Here There
200002 this is null
200002 that is null
200002 Apple this is that is
200002 Cell 4 null

推荐答案

为了在串联中保持正确的顺序-您应该有额外的列来定义该顺序-这通常是日期、日期时间、时间戳或仅仅是数字等.

因此,下面是针对BigQuery标准SQL的,假设您确实有这样一个名为ts的列

SELECT * EXCEPT(grp),
  CASE 
    WHEN string_col = 'Apple'
    THEN STRING_AGG(string_col, ' ') OVER win
  END AS Result
FROM (
  SELECT *, 
    COUNTIF(string_col = 'Apple') OVER win AS grp
  FROM your_table
  WINDOW win AS (PARTITION BY user_id ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
)
WINDOW win AS (PARTITION BY user_id, grp ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)

如果应用于您的问题中的样本数据-输出为

enter image description here

Sql相关问答推荐

跨多列的PostgreSQL非不同对

如何用3个(半)固定位置建模团队,并有效地搜索相同/不同的团队?

BigQuery`喜欢ANY‘和`不喜欢ANY’

转换表中的数据

收到%1、%2或%2邮箱的唯一客户

你能过滤一个列表只返回多个结果吗?

我怎样才能得到列值对应的最大值在另一个?

SQL按日期分组字段和如果日期匹配则求和

将一个数组反嵌套到另外两个数组SQL中(Athena/presto)

每个分组最多 Select 最后 2 个值并并排显示它们

SQL根据另一列的顺序和值获取组中的最后一列

SQL 将 Varchar 转换为日期

批量更改WooCommerce中所有产品的税收状态

插入行时的行安全策略问题

如何在 SQL Server 中将 -13422.8450 舍入到 -13422.84

使用 regexp_replace 替换所有出现的特殊字符

如何防止 SQL 中的负收入值并将其重新分配到接下来的月份?

多列上的 SQL UNIQUE 约束 - 它们的组合必须是唯一的还是至少其中之一?

如何使用子查询锁定此查询中的选定行?

SQL:获取连接表的第一个项目