一尘不染

标记个人事件发生后发生的日期

sql

我有一组长格式的数据(每人几行,person = id),其中一个事件(event = 1)应该只发生一次。事件发生后,该人将不再有其他数据。

如果事件发生后出现任何记录,我想创建一个名为flag(flag = 1)的新变量的查询。

例如,id 5在下面被标记,因为该人的事件发生后会出现一行数据。所有其他方案都可以。

因此,我需要将ID分组在一起,然后检查事件日期之后发生的任何日期。

在SQL中实现此目标的最有效方法是什么?

示例数据(逗号分隔):

id,date,event,flag
1,01-Aug-14,0,0
1,02-Aug-14,0,0
2,01-Aug-14,0,0
2,02-Aug-14,1,0
3,01-Aug-14,1,0
4,01-Aug-14,0,0
5,01-Aug-14,0,0
5,02-Aug-14,1,0
5,03-Aug-14,0,1

阅读 130

收藏
2021-05-30

共1个答案

一尘不染

我使用了一个subselect来计算日期之前ID的事件数。

sqlfiddle

select id,
 case 
    when (select count(1) from yourTable t2  where t2.date < t1.date and t1.id = t2.id and t2.event = 1) > 0 then 1
    else 0 
  end as flag
from
yourTable t1
2021-05-30