繁体   English   中英

查找第一次出现和随后发生的情况

[英]Find first occurrence and subsequent occurrences

我有下表,谨在此介绍2014年首次来此访问并在首次访问后2个月且首次访问后不到13个月内进行过后续访问的人员。

ID  firstname   surname dob event_key   event_date  status
1   Mark    Zeus    12-Dec-67   10  02-Feb-14   Appointment
1   Mark    Zeus    12-Dec-67   10  02-Feb-14   Attend
1   Mark    Zeus    12-Dec-67   11  06-Jul-14   Appointment
1   Mark    Zeus    12-Dec-67   11  06-Jul-14   Attend
1   Mark    Zeus    12-Dec-67   12  23-Nov-14   Appointment
1   Mark    Zeus    12-Dec-67   12  23-Nov-14   Attend
1   Mark    Zeus    12-Dec-67   13  23-Nov-14   Appointment
1   Mark    Zeus    12-Dec-67   13  23-Nov-14   Attend
2   Jane    Adams   24-Jul-57   14  15-Mar-15   Appointment
2   Jane    Adams   24-Jul-57   14  15-Mar-15   Attend
2   Jane    Adams   24-Jul-57   15  20-Apr-14   Appointment
2   Jane    Adams   24-Jul-57   15  20-Apr-14   Attend
2   Jane    Adams   24-Jul-57   16  04-Jan-15   Appointment
2   Jane    Adams   24-Jul-57   16  04-Jan-15   Attend
3   Rohan   Clark   05-Jan-78   17  22-Apr-09   Appointment
3   Rohan   Clark   05-Jan-78   17  22-Apr-09   Attend
3   Rohan   Clark   05-Jan-78   19  21-Mar-14   Appointment
3   Rohan   Clark   05-Jan-78   19  21-Mar-14   Attend
3   Rohan   Clark   05-Jan-78   20  30-Jun-15   Appointment
3   Rohan   Clark   05-Jan-78   20  30-Jun-15   Attend
3   Rohan   Clark   05-Jan-78   21  01-Jan-16   Appointment
3   Rohan   Clark   05-Jan-78   21  01-Jan-16   Attend
4   James   Gohan   03-Jun-78   22  17-Aug-14   Appointment
4   James   Gohan   03-Jun-78   22  17-Aug-14   Attend
4   James   Gohan   03-Jun-78   23  30-Dec-14   Appointment
4   James   Gohan   03-Jun-78   23  30-Dec-14   Attend
4   James   Gohan   03-Jun-78   24  03-Mar-15   Appointment
4   James   Gohan   03-Jun-78   24  03-Mar-15   Attend
4   James   Gohan   03-Jun-78   25  12-Apr-16   Appointment
4   James   Gohan   03-Jun-78   25  12-Apr-16   Attend
5   Isabel  Robyn   07-Jul-56   26  07-Jul-15   Appointment
5   Isabel  Robyn   07-Jul-56   26  07-Jul-15   Attend
5   Isabel  Robyn   07-Jul-56   27  12-May-16   Appointment
5   Isabel  Robyn   07-Jul-56   27  12-May-16   Attend
5   Isabel  Robyn   07-Jul-56   28  18-Feb-17   Appointment
5   Isabel  Robyn   07-Jul-56   28  18-Feb-17   Attend

下面是我的查询不起作用

SELECT              *

FROM                #temp   t1

WHERE               t1.[event_date] BETWEEN '01-Jan-2014' AND '31-Dec-2016'

                    AND t1.[ID]                 
                    IN
                        (
                            SELECT DISTINCT t2.[ID]
                            FROM #temp t2
                            WHERE   t2.[event_date] <= DATEADD(month, 13, t2.[event_date]) AND t2.[event_date] >= DATEADD(month, 2, [event_date])
                        )

ORDER BY            t1.[ID], t1.[event_key]

-- DROP TABLE           #temp

您可以有一个嵌套表,以返回所有初次访问的人,并将其他访问与之进行比较。

select distinct t1.id from Table1 t1 inner join 
    (select id, min(event_date) firstVisit from Table1 
    group by id
    having min(event_date) between '2014-01-01' and '2014-12-31') t2
    on t2.id=t1.id
where DATEDIFF(MONTH,t2.firstVisit,t1.event_date) > 2 
    and DATEDIFF(MONTH,t2.firstVisit,t1.event_date) < 13

这将返回:

1
2
4

我将使用条件聚合来做到这一点:

select id
from (select t.*,
             row_number() over (partition by id order by event_date) as seqnum
      from #temp t
     ) t
group by id
having year(min(event_date)) = 2014 and
       max(case when seqnum = 2 then event_date end) >= dateadd(month, 2, event_date) and
       max(case when seqnum = 2 then event_date end) < dateadd(month, 13, event_date);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM