sql >> Databasteknik >  >> RDS >> Oracle

SQL:Behöver ta bort dubbletter av rader i frågan

Eftersom du inte känner till alla dina affärsregler förutom den du gav, här är en mer allmän lösning.

Skapa en annan tabell (eller kanske din datamodell redan har en) med möjliga statusar i dem:

CREATE TABLE status_rank (
   status   VARCHAR2(100) NOT NULL,
   rank     NUMBER NOT NULL,
   PRIMARY KEY (status_name)
);

Den här tabellen används för att rangordna statuserna i prioritetsordning. Med andra ord, om "Waiver Requested" ska väljas framför "Rejected" i fallet med dubbletter, använd prioritet 1 för dispens och 2 för avslag.

Så nu kan frågan använda denna ytterligare rankningstabell:

SELECT b.docid, r.status
  FROM b,
       status_rank r,
       (SELECT b.id, min(r.rank)
          FROM b, status_rank r
         WHERE b.status = r.status
         GROUP BY id) s
 WHERE b.docid = s.docid
   AND r.rank = s.rank
   AND b.status = r.status;

Det finns många sätt att faktiskt göra frågan, men detta bör visa dig den allmänna idén.



  1. Hur man undviker multipla insert i PostgreSQL

  2. Python som refererar till databasanslutning på ett annat skript

  3. Att använda MySqlConnection (.NET) för att SSL-ansluta till MySql-server misslyckas från vissa klienter

  4. Konstigt beteende med SELECT WHERE A=$var SQL