Der er to grunde til, at row y
ikke returneres skyldes tilstanden:
b.start > a.start
betyder, at en række aldrig vil slutte sig til sig selv- GROUP BY returnerer kun én post pr.
APP_nm
værdi, men alle rækker har den samme værdi.
Der er dog yderligere logiske fejl i forespørgslen, som ikke kan håndteres. For eksempel, hvordan ved den, hvornår en "ny" session begynder?
Den logik, du søger, kan opnås i normal PostgreSQL ved hjælp af en DISTINCT ON
funktion, som viser en række pr. inputværdi i en bestemt kolonne. Dog DISTINCT ON
er ikke understøttet af Redshift.
Nogle potentielle løsninger:DISTINCT ON lignende funktionalitet til Redshift
Det output, du søger, ville være trivielt ved hjælp af et programmeringssprog (som kan gå gennem resultater og gemme variabler), men det er svært at anvende på en SQL-forespørgsel (som er designet til at fungere på rækker af resultater). Jeg vil anbefale at udtrække dataene og køre dem gennem et simpelt script (f.eks. i Python), som derefter kunne udskrive de start- og slutkombinationer, du søger.
Dette er en glimrende use-case for en Hadoop Streaming-funktion , som jeg med succes har implementeret tidligere. Det ville tage posterne som input, derefter "huske" starttidspunktet og ville kun udsende en post, når den ønskede slutlogik er blevet opfyldt.