2016-09-04 5 views
0

Ich habe eine Tabelle, die Reihe von Ereignissen enthält. Die Ereignisse können Suchen, Klicken, Öffnen usw. sein. Zu jeder Zeile gehört eine Datumsspalte.Holen Sie sich die vorherigen und nächsten Wert count

Ich versuche, Anzahl der Zeilen zu erhalten, wo das erste Ereignis gesucht wurde und das nächste Ereignis Klick war. Gibt es eine Möglichkeit, dies zu erreichen, indem man Voreilung/Verzögerung in Rotverschiebung verwendet?

Es wirft mir einen Fehler, dass Aggregatfunktionen Anrufe können nicht Funktion verschachtelt haben

count(CASE WHEN lead(trim(lower(event)), 1) 
        OVER (
        ORDER BY timevalue :: TIMESTAMP ASC) = 'click' AND trim(lower(event)) = 'search' 
    THEN 1 
     ELSE NULL END)    AS my_column, 
+1

Sie haben etwa 3 db Motoren hier aufgeführt. Welchen sollten wir behalten? – Drew

+0

Nur zur Rotverschiebung aktualisiert – FirstName

Antwort

0

ich Ihren Code zu arbeiten, erwarten würde, mit einer Unterabfrage. Ich würde es schreiben als:

select count(*) 
from (select t.*, 
      lead(event) over (order by timevalue) as next_event 
     from t 
    ) t 
where event = 'search' and next_event = 'click'; 

Ich würde die lower() und trim() als notwendig nicht erwarten, aber wenn Sie Ihre Daten wirklich schmutzig sind, könnten sie sein.

Hinweis: Sie können keine Fensterfunktion als Argument für eine Aggregationsfunktion verwenden, daher müssen Sie eine Unterabfrage verwenden.

Verwandte Themen