sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad exakt gör/denna uppgiftsutlåtande i SAS? PostgreSQL motsvarande?

Uttalandet använder vad som kallas "genom gruppbearbetning". Innan steget kan köras kräver det att data sorteras efter btn wtn resp_ji .

first.resp_ji piece kontrollerar för att se om det är första gången det ses det aktuella värdet av resp_ji inom den aktuella btn/wtn-kombinationen. Likaså last.resp_ji piece kontrollerar om det är sista gången som det kommer att se det aktuella värdet för resp_ji inom den aktuella btn/wtn-kombinationen.

Kombinera det hela tillsammans uttalandet:

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

Jag säger att om det aktuella värdet av resp_ji inträffar flera gånger för den aktuella kombinationen av btn/wtn, behåll posten, annars kasta posten. Beteendet för if uttalande när den används på det sättet behåller/slänger posten underförstått.

För att göra motsvarande i SQL kan du göra något i stil med:

  1. Hitta alla poster att kassera.
  2. Kassera dessa poster från den ursprungliga datamängden.

Så...

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

REDIGERA :Jag bör nämna att det inte finns någon enkel SQL-motsvarighet. Det kan vara möjligt genom att numrera rader i underfrågor och sedan bygga logik ovanpå det, men det skulle vara fult. Det kan också bero på den specifika smaken av SQL som används.



  1. MySQL - PHP unika värden från rader

  2. Optimera MySQL-inlägg för att hantera en dataström

  3. Hur tar man bort oanvända temporära filer från Google Cloud SQL-hanterade Postgres?

  4. Entity Framework 6 GUID som primärnyckel:Kan inte infoga värdet NULL i kolumnen "Id", tabellen "FileStore"-kolumnen tillåter inte nollvärden