代码之家  ›  专栏  ›  技术社区  ›  user22329205

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

  •  1
  • user22329205  · 技术社区  · 2 年前
    时间戳 用户ID 字符串_ col
    1. 100001 在这里
    2. 100001 那里
    3. 100001 苹果
    4. 200002 这是
    5. 200002 就是
    6. 200002 苹果
    7. 200002 一些
    8. 200002 夏天
    9 200002 冬天
    10 200002 苹果

    那是我的原始桌子&我想使用单词“Apple”作为触发词,将每个userID的N行(在本例中为2行)连接起来。

    下表是我想要的输出:

    时间戳 用户ID 字符串_ col 后果
    1. 100001 在这里 无效的
    2. 100001 那里 无效的
    3. 100001 苹果 这里那里
    4. 200002 这是 无效的
    5. 200002 就是 无效的
    6. 200002 苹果 这就是
    7. 200002 一些 无效的
    8. 200002 夏天 无效的
    9 200002 冬天 无效的
    10 200002 苹果 夏季-冬季
    1 回复  |  直到 2 年前
        1
  •  1
  •   Mikhail Berlyant    2 年前

    在下面使用

    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)     
    

    带输出

    enter image description here