row y
má dva důvody není vráceno je způsobeno podmínkou:
b.start > a.start
znamená, že řada se sama se sebou nikdy nespojí- Skupina GROUP BY vrátí pouze jeden záznam na
APP_nm
hodnotu, ale všechny řádky mají stejnou hodnotu.
V dotazu však existují další logické chyby, které nebude možné úspěšně zpracovat. Jak například pozná, kdy začíná „nová“ relace?
Logiku, kterou hledáte, lze dosáhnout v normálním PostgreSQL pomocí DISTINCT ON
funkce, která zobrazuje jeden řádek na vstupní hodnotu v konkrétním sloupci. Nicméně DISTINCT ON
není podporován Redshift.
Některá potenciální zástupná řešení:VÝRAZNĚ ON podobná funkce pro Redshift
Výstup, který hledáte, by byl triviální pomocí programovacího jazyka (který může procházet výsledky a ukládat proměnné), ale je obtížné jej použít na dotaz SQL (který je navržen tak, aby fungoval na řádcích výsledků). Doporučil bych extrahovat data a spustit je pomocí jednoduchého skriptu (např. v Pythonu), který by pak mohl vygenerovat kombinace Start &End, které hledáte.
Toto je vynikající případ použití pro funkci Hadoop Streaming , kterou jsem v minulosti úspěšně realizoval. Vezme záznamy jako vstup, pak si „zapamatuje“ čas začátku a vydá záznam pouze tehdy, když bude splněna požadovaná koncová logika.