PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Abrufen von Zeilen basierend auf der Bedingung

Es gibt zwei Gründe, warum row y nicht zurückgegeben wird, liegt an der Bedingung:

  • b.start > a.start bedeutet, dass eine Zeile niemals mit sich selbst verbunden wird
  • Das GROUP BY gibt nur einen Datensatz pro APP_nm zurück Wert, aber alle Zeilen haben denselben Wert.

Es gibt jedoch weitere Logikfehler in der Abfrage, die nicht erfolgreich verarbeitet werden können. Woher weiß es beispielsweise, wann eine "neue" Sitzung beginnt?

Die gesuchte Logik kann in normalem PostgreSQL mit Hilfe eines DISTINCT ON erreicht werden -Funktion, die eine Zeile pro Eingabewert in einer bestimmten Spalte anzeigt. Jedoch DISTINCT ON wird von Redshift nicht unterstützt.

Einige mögliche Problemumgehungen:DISTINCT ON wie Funktionalität für Redshift

Die gesuchte Ausgabe wäre mit einer Programmiersprache (die Ergebnisse durchlaufen und Variablen speichern kann) trivial, lässt sich jedoch nur schwer auf eine SQL-Abfrage anwenden (die für die Verarbeitung von Ergebniszeilen ausgelegt ist). Ich würde empfehlen, die Daten zu extrahieren und sie durch ein einfaches Skript (z. B. in Python) laufen zu lassen, das dann die gesuchten Start- und Endkombinationen ausgeben könnte.

Dies ist ein hervorragender Anwendungsfall für eine Hadoop-Streaming-Funktion , die ich in der Vergangenheit erfolgreich umgesetzt habe. Es würde die Datensätze als Eingabe nehmen, sich dann die Startzeit „merken“ und nur dann einen Datensatz ausgeben, wenn die gewünschte Endlogik erfüllt ist.