TimeStamp USER ID string_col
1 100001 Here
2 100001 there
3 100001 Apple
4 200002 this is
5 200002 that is
6 200002 Apple
7 200002 some
8 200002 summer
9 200002 winter
10 200002 Apple

这是我的原始表&我想使用单词"Apple"作为触发词, for each 用户ID只连接上面的N行(在本例中是2行).

下表是我要查找的输出:

TimeStamp USER ID string_col Result
1 100001 Here null
2 100001 there null
3 100001 Apple Here There
4 200002 this is null
5 200002 that is null
6 200002 Apple this is that is
7 200002 some null
8 200002 summer null
9 200002 winter null
10 200002 Apple summer winter

推荐答案

在下面使用

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

Sql相关问答推荐

Microsoft Access UNION将长文本字段限制为255个字符

使用SQL旋转表的列(Snowflake)

部分匹配表中元素的MariaDB查询查找结果

如何在SQL中更新Json字符串

根据最大值为字母数字大小写分配数值

用VB.NET在Dapper中实现MS Access数据库顺序透视

用另一个表中的特定名称替换 SQL 查询中的 ID.但我的两个表都有多个列

使用 union 的有序结果获取行数

AdventureWorks 查询

将时间戳四舍五入到最近 10 分钟的查询

SQL 搜索 - 获取最大值日期的奇怪行为

获取多个开始-结束时间戳集之间经过的时间

如何在第二个 INSERT 中使用第一个 INSERT 自动生成的 ID

如何根据共同列值从两个表中包含列,但只包含左表中的行

使用其他表 SUM 的交换价格转换价格并获得 AVG

使用 GROUP BY 时如何创建其他组?

如何 Select 一列具有最小值而另一列具有给定值的记录?

在 postgresql 中,我可以将其组合成一个查询吗?

SQL - 使用子查询返回多行的 LIKE 命令

如何使用 pg-promise 创建要在复杂的 sql 查询中使用的 VALUES 列表?