Det finns två anledningar till att row y
inte returneras beror på skicket:
b.start > a.start
betyder att en rad aldrig kommer att förenas med sig själv- GROUP BY returnerar endast en post per
APP_nm
värde, men alla rader har samma värde.
Det finns dock ytterligare logiska fel i frågan som inte kommer att hanteras framgångsrikt. Till exempel, hur vet den när en "ny" session börjar?
Logiken du söker kan uppnås i normal PostgreSQL med hjälp av en DISTINCT ON
funktion, som visar en rad per inmatningsvärde i en specifik kolumn. Men DISTINCT ON
stöds inte av Redshift.
Några möjliga lösningar:DISTINCT ON som funktionalitet för Redshift
Utdatan du söker skulle vara trivial med hjälp av ett programmeringsspråk (som kan gå igenom resultat och lagra variabler) men är svår att applicera på en SQL-fråga (som är designad för att fungera på rader med resultat). Jag skulle rekommendera att extrahera data och köra den genom ett enkelt skript (t.ex. i Python) som sedan kan mata ut de start- och slutkombinationer du söker.
Detta är ett utmärkt användningsfall för en Hadoop Streaming-funktion , som jag framgångsrikt har implementerat tidigare. Det skulle ta posterna som indata, sedan "komma ihåg" starttiden och skulle bara mata ut en post när den önskade slutlogiken har uppfyllts.