我有一组长格式的数据(每人几行,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
我使用了一个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