sql >> Databasteknik >  >> RDS >> PostgreSQL

Hämta rader baserat på skick

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.



  1. Bästa tillvägagångssätt för grupperade löpande summor

  2. Django Query Natural Sort

  3. Hur man representerar datum med osäkerhet i PostgreSQL

  4. PHP Caching - Går det snabbare att spara i databasen eller skapa en fil?