Istnieją dwa powody, dla których row y
nie został zwrócony ze względu na stan:
b.start > a.start
oznacza, że wiersz nigdy nie połączy się ze sobą- GRUPA WEDŁUG zwróci tylko jeden rekord na
APP_nm
wartość, ale wszystkie wiersze mają tę samą wartość.
Jednak w zapytaniu występują dalsze błędy logiczne, które nie zostaną pomyślnie obsłużone. Na przykład, skąd wie, kiedy rozpoczyna się „nowa” sesja?
Poszukiwaną logikę można osiągnąć w normalnym PostgreSQL za pomocą DISTINCT ON
funkcja, która pokazuje jeden wiersz na wartość wejściową w określonej kolumnie. Jednak DISTINCT ON
nie jest obsługiwany przez Redshift.
Kilka potencjalnych rozwiązań:DISTINCT ON podobne funkcje dla Redshift
Wynik, którego szukasz, byłby trywialny przy użyciu języka programowania (który może przeglądać wyniki i przechowywać zmienne), ale trudno go zastosować do zapytania SQL (które jest zaprojektowane do operowania na wierszach wyników). Zalecam wyodrębnienie danych i uruchomienie ich za pomocą prostego skryptu (np. w Pythonie), który może następnie wyprowadzić żądane kombinacje Początek i Koniec.
Jest to doskonały przypadek użycia funkcji Hadoop Streaming , które z powodzeniem zrealizowałem w przeszłości. Przyjmie rekordy jako dane wejściowe, a następnie „zapamięta” czas rozpoczęcia i wyśle rekord tylko wtedy, gdy pożądana logika końcowa zostanie spełniona.