PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Pobierz wiersze na podstawie warunku

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oblicz następny klucz podstawowy - o określonym formacie

  2. Po przywróceniu mojej bazy danych serial usunięty z kolumny w Postgresql

  3. PostgreSQL 9.5 - aktualizacja nie działa podczas łączenia NULL z JSON

  4. docker-compose nie uruchamia obrazu postgres

  5. Czy używanie tablic w bazie danych to zły projekt?