对于每个客户ID,数据集都有几行,以及TS.

对于每个客户ID,我想判断Status列,以判断它是否在该客户ID的前几行中包含Cancelled值.(由TS订购)

CustomerID Status TS
Vimes CANCELLED Jan 1
Vimes ACTIVE Jan 2
Vimes CANCELLED Jan 3
Sybill ACTIVE Jan 2
Sybill ACTIVE Jan 5
Sybill ACTIVE Jan 6

结果集应该如下所示,添加了一个带有标志Rejoiner的列,用于判断Status列之前的值-

CustomerID Status TS Rejoiner
Vimes CANCELLED Jan 1 No
Vimes ACTIVE Jan 2 Yes
Vimes CANCELLED Jan 3 Yes
Sybill ACTIVE Jan 2 No
Sybill ACTIVE Jan 5 No
Sybill CANCELLED Jan 6 No

推荐答案

在下面使用

select *, 
  if(countif(status = 'CANCELLED') over win > 0, 'Yes', 'No') as Rejoiner
from your_table 
window win as (partition by customerid order by unix_date(date(ts)) range between unbounded preceding and 1 preceding)           

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

enter image description here

Sql相关问答推荐

SQL查询以创建手头的流动余额?

使用SQL旋转表的列(Snowflake)

基于前面行的值:当x&>2时重复1,当连续3行x=0时则重复0

为什么Prisma生成唯一索引,而不是基于方案上的唯一列约束?

使用占位符向SQL INSERT查询添加 case

删除事务中的本地临时表

如何在presto中映射id与名称

PATINDEX中与[A-Z]匹配(U除外)的正则表达式

在SQL中,筛选其他列中只有一个值的ID

如何根据几个条件 Select 值:如果满足一个范围的SUM,则对另一个范围求和

SQL:如果一个表中的日期在另一个表的日期的12个月内,则为是或否

SQL JSON_QUERY 使用列中的值构造 json 路径并接收错误

Postgresql - WHERE 中的 MAX 标准 - 初学者问题

如何在 SQL Server 中解决这个复杂的窗口查询?

SQL 根据前一天的最大值计算每天的值数

如何从三个连接表中获取数据,并始终显示第一个表中的数据,以及第三个表中的空值或现有记录?

计算 ID 满足条件的次数

使用对 nvarchar 列的多个 LIKE 操作优化 SQL 查询

SQL Server Where 条件

当我按 PK 分组时,该表中的所有列在每个组中都具有相同的值.那么为什么 SQL Server 需要对这些列进行聚合呢?