2017-09-10 5 views
0

J'ai écrit une requête pour identifier les enregistrements en double.Comment faire pour supprimer ces enregistrements dans Netezza (Aginity)

Comme ci-dessous.

WITH DUPS AS 
    (SELECT A_SURVEYID, 
    CAST(e_responsedate AS DATE) AS e_responsedate, 
    E_LG_VM_SURVEY_TYPE_ENUM 
    FROM TRANSIENT..INTERIM_NPS_SURVEY_MOBILE_RESULTS_20170909 a 
    GROUP BY A_SURVEYID, 
    CAST(e_responsedate AS DATE), 
    E_LG_VM_SURVEY_TYPE_ENUM 
HAVING COUNT(*) > 1 
), 
    RANKED AS 
    (SELECT R.DRS_RECORD_ID, 
    R.A_SURVEYID, 
    R.e_responsedate , 
    ROW_NUMBER() OVER (PARTITION BY R.A_SURVEYID, CAST(R.e_responsedate AS DATE), 
     R.E_LG_VM_SURVEY_TYPE_ENUM ORDER BY SUBSTR(R.DRS_RECORD_ID, INSTR(':', R.DRS_RECORD_ID, 37) + 1, 14) DESC, 
     SUBSTR(R.DRS_RECORD_ID, INSTR(':', R.DRS_RECORD_ID, 32) + 1, 4) ASC) AS DR 
    FROM TRANSIENT..INTERIM_NPS_SURVEY_MOBILE_RESULTS_20170909 R 
    INNER JOIN DUPS 
    ON R.A_SURVEYID     = DUPS.A_SURVEYID 
    AND CAST(R.e_responsedate AS DATE) = DUPS.e_responsedate 
    AND R.E_LG_VM_SURVEY_TYPE_ENUM  = DUPS.E_LG_VM_SURVEY_TYPE_ENUM 
) 
SELECT * 
FROM TRANSIENT..INTERIM_NPS_SURVEY_MOBILE_RESULTS_20170909 F 
INNER JOIN RANKED 
ON F.DRS_RECORD_ID = RANKED.DRS_RECORD_ID 
WHERE RANKED.DR  > 1 

-

En utilisant le dessus de la requête je suis capable de récupérer les enregistrements (certains 6000+)..

Mais je suis incapable de supprimer ces enregistrements.

Pouvez-vous m'aider s'il vous plaît à ce sujet.

Cordialement,

Krish

Répondre

0

Vous êtes très proche. Au cours des 5 dernières lignes, faites ceci:

Delete from FROM TRANSIENT..INTERIM_NPS_SURVEY_MOBILE_RESULTS_2017090 
Where DRS_RECORD_ID in (
    Select DRS_RECORD_ID from RANKED WHERE DR>1) 

devrait fonctionner :)

BTW: Je suis sûr que cela peut être fait avec moins de code, mais ce n'est pas important ...

+0

J'ai essayé avec le même en ajoutant supprimer dans le qurey, mais je reçois [42000] erreur dans netezza .. – Krish

+0

Et vous avez fait comme je l'ai écrit? La suppression avec la syntaxe JOIN est un peu plus difficile si je me souviens bien. Et quel est le texte qui accompagne '42000' Je ne me souviens pas de tous les codes d'erreur par cœur :) –