我有一组长格式的数据(每人几行,person = id),其中事件(事件= 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
答案 0 :(得分:2)
我使用子选择来计算日期之前id的事件数。
<强> SQL Fiddle Demo 强>
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