SQL-创建事件的日期和时间计数

时间:2014-09-14 13:56:27

标签: sql sql-server

我比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.

1 个答案:

答案 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是保留字。我已经使用了这些而没有逃避它们。对列名使用保留字是个坏主意;它使代码更难编写和读取。