0
votes

Comment obtenir des données avec des doublons supprimés?

Le code ci-dessous consiste à obtenir des données distinctes en termes de nom de colonne E1 et MDL, mais ne montre aucune reslut. J'ai mis "et Rownum dans (sélectionnez max (Rownum) de T1 .." Pour enlever la rangée diliquée.

Si je retirez "et Rownum in (sélectionnez max (rownum) de T1 ..", alors bien sûr tout le Données dans le tableau T1 sélectionné. P>

    <Table and data>

    CREATE TABLE T1  (  
      dte VARCHAR2(15),
      gu1 VARCHAR2(15),
      gu2 VARCHAR2(15),
      eq VARCHAR2(15),
      mdl VARCHAR2(15),
      val VARCHAR2(15)  
      );

    INSERT INTO T1 VALUES('20190801','30','30','E1','M1','1.5');  
    INSERT INTO T1 VALUES('20190801','30','30','E1','M1',NULL);  
    INSERT INTO T1 VALUES('20190801','30','30','E1','M1','0');  
    INSERT INTO T1 VALUES('20190802','30','30','E1','M1','1.5');  
    INSERT INTO T1 VALUES('20190803','30','30','E3','M1','3.0'); 



    <Code>

    SELECT gu1,gu2,eq,mdl
    FROM T1
    WHERE val <> '0' AND val IS NOT NULL
    AND dte >= '20190801' AND dte <= '20190803'
    AND gu1 = '30'
    AND ROWNUM IN (SELECT MAX(ROWNUM) FROM T1   --to get only one among dulplicated rows in terms of column e1, mdl,
        WHERE val <> '0' AND val IS NOT NULL
        AND dte >= '20190801' AND dte <= '20190803'
        AND gu1 = '30' 
        GROUP BY eq,mdl)
    ;


   <Expexted result is>
    GU1  GU2  EQ    MDL
    ---- ---- ---- ---- 
    30   30   E1    M1
    30   30   E3    M1


0 commentaires

3 Réponses :


1
votes

Rownum est généré après la sortie de la ligne. Ce que vous pouvez faire à la place, c'est utiliser Row_Number fonction analytique comme suit

SELECT * FROM (
SELECT gu1,gu2,eq,mdl,row_number() over(partition by eq,mdl order by dte desc) as rnk
    FROM T1
    WHERE val <> '0' AND val IS NOT NULL
    AND dte >= '20190801' AND dte <= '20190803'
    AND gu1 = '30'
   )x
WHERE x.rnk=1


0 commentaires

0
votes

Essayez d'utiliser Sélectionner une instruction distincte . xxx

Plus d'infos sur distinct Utiliser ici


0 commentaires

0
votes

Autant que je comprenne des données d'échantillons et de la sortie attendue, vous pouvez utiliser l'une des méthodes suivantes:

  1. distinct - comme décrit dans la réponse VSMENT
  2. en utilisant rownum - comme décrit dans George Joseph Répondre
  3. en utilisant existe comme décrit après

    - Dans l'exemple suivant, vous pouvez également utiliser avec comme pour supprimer l'excès de codage en double xxx

    acclamations !! < / p>


0 commentaires