sql >> Database >  >> RDS >> PostgreSQL

Wat doet de/deze gegevensverklaring in SAS precies? PostgreSQL-equivalent?

De verklaring maakt gebruik van wat 'door groepsverwerking' wordt genoemd. Voordat de stap kan worden uitgevoerd, moeten de gegevens worden gesorteerd op btn wtn resp_ji .

De first.resp_ji piece controleert of het de eerste keer is dat het de huidige waarde van resp_ji binnen de huidige btn/wtn-combinatie ziet. Evenzo de last.resp_ji stuk controleert of het de laatste keer is dat het de huidige waarde van resp_ji ziet binnen de huidige btn/wtn combinatie.

Combineer het allemaal met de verklaring:

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

Zegt, als de huidige waarde van resp_ji meerdere keren voorkomt voor de huidige combinatie van btn/wtn, bewaar dan het record, anders gooi het record weg. Het gedrag van de if verklaring bij gebruik als dat impliciet de record bewaart/verwijdert.

Om het equivalent in SQL te doen, zou je zoiets kunnen doen:

  1. Vind alle records om te verwijderen.
  2. Gooi die records weg uit de oorspronkelijke dataset.

Dus...

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

BEWERKEN :Ik moet vermelden dat er geen eenvoudig SQL-equivalent is. Het is misschien mogelijk door rijen in subquery's te nummeren en daar logica op te bouwen, maar het zou lelijk zijn. Het kan ook afhangen van de specifieke smaak van SQL die wordt gebruikt.



  1. java.sql.SQLException:luisteraar weigerde de verbinding met de volgende fout:ORA-12519, TNS:geen geschikte service-handler gevonden

  2. Spring Data-query werkt niet wanneer de queryparameter een entiteit is

  3. De eerste html-rij wordt niet weergegeven

  4. Maak de totale waarde op in een valuta met 2 decimalen