我比SQL更新
我的数据集是:
ID Date Group Event1 Event2
1 4-1-12 1 0 0
1 4-2-12 1 0 0
1 4-16-12 2 1 0
1 4-16-12 2 1 1
我需要创建一个名为Marker的变量,如果事件1首先发生,则计为1,然后事件2发生在事件1的1天内。因此,Marker应该等于1的唯一行是第四行。其余的都应该是0.
答案 0 :(得分:0)
如果我理解逻辑正确,可以使用窗口函数执行此操作:
select id, date, group, event1, event2,
(case when FirstEvent1Date < FirstEvent2Date and
FirstEvent2Date <= dateadd(day, 1, FirstEvent1Date)
then 1 else 0
end) as Marker
from (select ds.*,
min(case when event1 = 1 then date end) over (partition by group) as FirstEvent1Date,
min(case when event2 = 1 then date end) over (partition by group) as FirstEvent2Date,
from dataset ds
) ds;
请注意,您的问题的列名如group
是保留字。我已经使用了这些而没有逃避它们。对列名使用保留字是个坏主意;它使代码更难编写和读取。