sql >> Databáze >  >> RDS >> PostgreSQL

Načíst řádky na základě podmínky

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.



  1. Nahrávání obrázků v CKEditoru bez použití pluginu

  2. Oracle Apex 5 – lišta zápatí jako v App Builderu

  3. Vytvořit spouštěč pro protokolování SQL ovlivněné tabulky?

  4. Zkontrolujte, zda tabulka obsahuje sloupec TIMESTAMP na serveru SQL pomocí OBJECTPROPERTY()