sql >> Database teknologi >  >> RDS >> PostgreSQL

Hent rækker baseret på tilstand

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.



  1. gemme arabisk i SQL-database

  2. Kan jeg bruge ADFS 2.0 til at godkende visse brugere mod SQL Server?

  3. Ændring af alle nuller (hvis nogen) på tværs af alle kolonner (i en tabel) til... sig 1

  4. Hvordan ændrer jeg i SQL*Plus prompten for at vise den tilsluttede bruger og database?