2017-02-08 5 views
0

IWie finde ich Benutzer mit aufeinanderfolgenden Werten

ID  Date   result 
xxx3614 2017-02-01 n 
xxx3614 2017-02-06 n 
xxx4522 2017-02-06 n 
xxx5516 2017-02-02 n 
xxx5516 2017-02-04 n 
xxx5516 2017-02-06 n 
xxx9061 2017-02-02 n 
xxx9061 2017-02-04 n 
xxx9061 2017-02-06 y 
xxx9061 2017-02-06 n 

Ich bin auf der Suche für die Nutzer, die ein Ergebnis von n nacheinander 3 mal eine Abfrage mit folgendem Ergebnis haben. SO im obigen Ergebnis, sollte die Abfrage oben nur geben, dass ich xxx5516 Benutzer Wie mache ich das?

Antwort

1

Der einfachste Weg ist lag() oder lead() zu verwenden:

select distinct id 
from (select t.*, lead(result) over (partition by id order by date) as result_1, 
      lead(result, 2) over (partition by id order by date) as result_2 
     from t 
    ) t 
where result = 'n' and result_1 = 'n' and result_2 = 'n' 
0

Verwenden Sie eine Fensterfunktion mit einem Argument Bereich in den letzten 2 aufeinander folgenden Ergebnisse zu überprüfen:

SELECT * from (
SELECT ID, date, result, 
SUM(case when result = 'n' then 1 else 0 end)) 
    OVER (PARTITION BY ID 
      ORDER BY date 
      ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) result_prev_sum 
FROM table 
) x 
WHERE x.result_prev_sum = 3 

Wenn Sie nur die dritte wollen aufeinanderfolgendes Ergebnis, und nicht mehr, verwenden UNBOUNDED PRECEDING statt ZWISCHEN 2 VORHERGEHENDE UND AKTUELLE ROW.

0

wählen eindeutige ID aus Tabelle

wo count (result) = 3;

Verwandte Themen