如何使用 Google BigQuery 中的条件根据特定列值连接列的 N 行?

问题描述 投票:0回答:1
时间戳 用户ID string_col
1 100001 这里
2 100001 那里
3 100001 苹果
4 200002 这是
5 200002 就是这样
6 200002 苹果
7 200002 一些
8 200002 夏天
9 200002 冬天
10 200002 苹果
11 200002 苹果

这是我的原始表,我想使用单词“Apple”作为触发词来为每个用户 ID 连接上面的 N 行(在本例中为 2)行。

下表是我正在寻找的输出:

时间戳 用户ID string_col 结果
1 100001 这里
2 100001 那里
3 100001 苹果 这里
4 200002 这是
5 200002 就是这样
6 200002 苹果 这个就是那个
7 200002 一些
8 200002 夏天
9 200002 冬天
10 200002 苹果 夏天冬天
11 200002 苹果 夏天冬天
sql google-bigquery window-functions string-agg
1个回答
1
投票

使用下面

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 2 PRECEDING AND 1 PRECEDING)     

有输出

© www.soinside.com 2019 - 2024. All rights reserved.