标记日期发生在个人事件之后

时间:2014-08-04 12:50:14

标签: sql date timestamp

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

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