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

Co přesně dělá/tento datový výpis v SAS dělá? Ekvivalent PostgreSQL?

Příkaz používá to, co se nazývá „zpracováním skupiny“. Před spuštěním kroku je nutné, aby byla data seřazena podle btn wtn resp_ji .

first.resp_ji kus kontroluje, zda je to poprvé, co vidí aktuální hodnotu resp_ji v rámci aktuální kombinace btn/wtn. Podobně last.resp_ji kus kontroluje, zda je to poslední čas, kdy uvidí aktuální hodnotu resp_ji v rámci aktuální kombinace btn/wtn.

Spojením všeho dohromady výrok:

if not (first.resp_ji and last.resp_ji);

Říká se, že pokud se aktuální hodnota resp_ji vyskytuje vícekrát pro aktuální kombinaci btn/wtn, ponechte záznam, jinak záznam zahoďte. Chování if příkaz při takovém použití implicitně uchovává/zahazuje záznam.

Chcete-li provést ekvivalent v SQL, můžete udělat něco jako:

  1. Najděte všechny záznamy, které chcete zahodit.
  2. Zrušte tyto záznamy z původní datové sady.

Takže...

create table rows_to_discard as 
select btn, wtn, resp_ji, count(*) as freq
from mytable
group by btn, wtn, resp_ji
having count(*) = 1

create table want as 
select a.*
from mytable a
left join rows_to_discard b  on b.btn = a.btn
                            and b.wtn = a.wtn
                            and b.resp_ji = a.resp_ji
where b.btn is null

UPRAVIT :Měl bych zmínit, že neexistuje žádný jednoduchý ekvivalent SQL. Možná by to bylo možné očíslováním řádků v dílčích dotazech a vytvořením logiky nad tím, ale bylo by to ošklivé. Může to také záviset na konkrétní verzi používaného SQL.



  1. Načítání záznamů mysql do html tabulky pomocí PHP

  2. Jak zrušit výchozí omezení SQL, aniž byste znali jeho název?

  3. Jak navrhnout databázi cestovního webu

  4. Kde je soubor jar ojdbc