2017-03-05 15 views
0

Hallo Alle Ich habe die untenstehende Tabelle, und ich möchte Menschen, die zum ersten Mal im Jahr 2014 kamen und die Besuche nach 2 Monaten ihres ersten Besuchs und in weniger als 13 Monaten hatte nach ihrem ersten Besuch.Finden Sie das erste Vorkommen und die folgenden Vorkommen

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 

Unten ist meine Abfrage, die eine verschachtelte Tabelle, die alle Menschen mit ihrem ersten Besuch zurückkehren können

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 

Antwort

0

Sie nicht funktioniert hat haben, und die anderen Besucher mit dem vergleichen.

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 

das gibt zurück:

1 
2 
4 
+0

Hallo Dank für Ihre Eingabe. Nur ein kurzer, wie kann ich nur eindeutige Zeilen pro ID haben? Danke –

+0

@RomainHapi das wird eindeutige Zeile pro ID zurückgeben. –

+0

Hallo nochmal, ja es gibt die eindeutigen IDs und nicht alle Spalten zurück. Ich möchte IDs zusammen mit allen verwandten Spalten zurückgeben, wenn das Sinn macht. Grüße –

0

Ich würde dies mit bedingter Aggregation tun:

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); 
+0

Hallo vielen Dank für Ihre Eingabe. Nur ein kurzer, wie kann ich nur eindeutige Zeilen pro ID haben? Danke –

+0

@RomainHapi. . . Ich verstehe deine Frage nicht. Dies gibt eine Zeile pro ID zurück. –

+0

Hi nochmal, ja es gibt die eindeutigen IDs und nicht alle Spalten zurück. Ich möchte IDs zusammen mit allen verwandten Spalten zurückgeben, wenn das Sinn macht. Grüße –

Verwandte Themen