Page 1 sur 1

suppression doublon les moins récents

Posté : 08 févr. 2013, 12:20
par Tetranatos
Bonjour!!
Je vous explique mon problème, je débute avec le SQL et ma boite aimerai que je supprime les doublons les plus anciens (DATEATT) qui sont sur le GA_CODEARTICLE.
Je n'arrive pas à m'en sortir... Je travail sur SQL-SERVER 2008
Voici la requete :
12345678910111213141516171819202122 SELECT     TOP (100) PERCENT dbo.ARTICLE.GA_CODEARTICLE AS Code, dbo.ARTICLE.GA_LIBELLE AS Libellé, dbo.ARTICLE.GA_QUALIFUNITESTO AS Cond, 
                      dbo.ZW_TGD.YTS_PRIXNET AS TGD, dbo.ZW_T000.YTS_PRIXNET AS Tarif, dbo.ARTICLE.GA_VALLIBRE1 AS Planc, dbo.ZW_TDES.YTS_PRIXNET AS Desto, 
                      dbo.DISPO.GQ_PHYSIQUE - dbo.DISPO.GQ_RESERVECLI AS Dispo, dbo.ZW_DATERECEPART.DATEATT AS [D. Arriv], 
                      dbo.ZW_ETAT_CONTAINER.RDD_RDDLIBTABLE1 AS S, dbo.ZWL_STOCKARTA.QDISPOP AS Réser, 
                      dbo.ZWL_STOCKARTA.QATT + dbo.ZWL_STOCKARTA.QDISPO AS Solde, dbo.ZW_TDET.YTS_PRIXNET AS Détail, dbo.CHOIXEXT.YX_LIBELLE AS Statut, 
                      dbo.ZW_DATERECEPART.qtecartons AS [Arr.]
FROM         dbo.ZW_TDET INNER JOIN
                      dbo.ARTICLE INNER JOIN
                      dbo.ZW_T000 ON dbo.ARTICLE.GA_ARTICLE = dbo.ZW_T000.YTS_ARTICLE INNER JOIN
                      dbo.DISPO ON dbo.ARTICLE.GA_ARTICLE = dbo.DISPO.GQ_ARTICLE ON dbo.ZW_TDET.YTS_ARTICLE = dbo.ARTICLE.GA_ARTICLE INNER JOIN
                      dbo.CHOIXEXT ON dbo.ARTICLE.GA_LIBREART1 = dbo.CHOIXEXT.YX_CODE LEFT OUTER JOIN
                      dbo.ZW_TGD ON dbo.ARTICLE.GA_ARTICLE = dbo.ZW_TGD.YTS_ARTICLE LEFT OUTER JOIN
                      dbo.ZW_DATERECEPART INNER JOIN
                      dbo.ZW_ETAT_CONTAINER ON dbo.ZW_DATERECEPART.Expr1 = dbo.ZW_ETAT_CONTAINER.GP_NUMERO ON 
                      dbo.ARTICLE.GA_ARTICLE = dbo.ZW_ETAT_CONTAINER.GLARTICLE AND dbo.ARTICLE.GA_ARTICLE = dbo.ZW_DATERECEPART.ARTICLE LEFT OUTER JOIN
                      dbo.CATALOGU ON dbo.ARTICLE.GA_ARTICLE = dbo.CATALOGU.GCA_ARTICLE AND dbo.ARTICLE.GA_FOURNPRINC = dbo.CATALOGU.GCA_TIERS LEFT OUTER JOIN
                      dbo.ZWL_STOCKARTA ON dbo.ARTICLE.GA_ARTICLE = dbo.ZWL_STOCKARTA.QARTICLE LEFT OUTER JOIN
                      dbo.ZW_TDES ON dbo.ARTICLE.GA_ARTICLE = dbo.ZW_TDES.YTS_ARTICLE
WHERE     (dbo.DISPO.GQ_DEPOT = 'C') AND (dbo.ARTICLE.GA_FERME = '-') AND (dbo.ZWL_STOCKARTA.QATT <> 0) AND (dbo.ZW_DATERECEPART.qtecartons <> 0) OR
                      (dbo.DISPO.GQ_DEPOT = 'C') AND (dbo.ARTICLE.GA_FERME = '-') AND (LEFT(dbo.ARTICLE.GA_CODEARTICLE, 1) <> 'a') AND (LEFT(dbo.ARTICLE.GA_CODEARTICLE, 1) 
                      <> 'b') AND (LEFT(dbo.ARTICLE.GA_CODEARTICLE, 1) <> 'w') AND (dbo.DISPO.GQ_PHYSIQUE - dbo.DISPO.GQ_RESERVECLI > 0)
ORDER BY Code 
Merci pour votre aide!!
Romain

Re: suppression doublon les moins récents

Posté : 08 févr. 2013, 19:57
par Cyrano
Salut, ta question est un peu incomplète : tu n'y arrives pas, bon, ok, mais tu obtiens quoi ? Un message d'erreur ? Rien ? Et pour qu'on sache comment orienter éventuellement la réponse, tu attends quoi à la place du résultat actuel ?

Quoi qu'il en soit, je viens de jeter un coup d’œil à ta requête. Il y a peut-être un problème dans les jointures. En réalignant tout ça proprement histoire d'arriver à lire, voici une suggestion de correction :
SELECT
    TOP (100) PERCENT dbo.ARTICLE.GA_CODEARTICLE        AS Code,
    dbo.ARTICLE.GA_LIBELLE                              AS Libellé,
    dbo.ARTICLE.GA_QUALIFUNITESTO                       AS Cond,
    dbo.ZW_TGD.YTS_PRIXNET                              AS TGD,
    dbo.ZW_T000.YTS_PRIXNET                             AS Tarif,
    dbo.ARTICLE.GA_VALLIBRE1                            AS Planc,
    dbo.ZW_TDES.YTS_PRIXNET                             AS Desto,
    (dbo.DISPO.GQ_PHYSIQUE - dbo.DISPO.GQ_RESERVECLI)   AS Dispo,
    dbo.ZW_DATERECEPART.DATEATT                         AS [D. Arriv],
    dbo.ZW_ETAT_CONTAINER.RDD_RDDLIBTABLE1              AS S,
    dbo.ZWL_STOCKARTA.QDISPOP                           AS Réser,
    (dbo.ZWL_STOCKARTA.QATT + dbo.ZWL_STOCKARTA.QDISPO) AS Solde,
    dbo.ZW_TDET.YTS_PRIXNET                             AS Détail,
    dbo.CHOIXEXT.YX_LIBELLE                             AS Statut,
    dbo.ZW_DATERECEPART.qtecartons                      AS [Arr.]
FROM dbo.ZW_TDET
    INNER JOIN dbo.ARTICLE              ON dbo.ZW_TDET.YTS_ARTICLE    = dbo.ARTICLE.GA_ARTICLE
    INNER JOIN dbo.ZW_T000              ON dbo.ARTICLE.GA_ARTICLE     = dbo.ZW_T000.YTS_ARTICLE
    INNER JOIN dbo.DISPO                ON dbo.ARTICLE.GA_ARTICLE     = dbo.DISPO.GQ_ARTICLE
    INNER JOIN dbo.CHOIXEXT             ON dbo.ARTICLE.GA_LIBREART1   = dbo.CHOIXEXT.YX_CODE
    LEFT OUTER JOIN dbo.ZW_TGD          ON dbo.ARTICLE.GA_ARTICLE     = dbo.ZW_TGD.YTS_ARTICLE
    LEFT OUTER JOIN dbo.ZW_DATERECEPART ON dbo.ARTICLE.GA_ARTICLE     = dbo.ZW_DATERECEPART.ARTICLE
    INNER JOIN dbo.ZW_ETAT_CONTAINER    ON dbo.ZW_DATERECEPART.Expr1  = dbo.ZW_ETAT_CONTAINER.GP_NUMERO
                                       AND dbo.ARTICLE.GA_ARTICLE     = dbo.ZW_ETAT_CONTAINER.GLARTICLE
    LEFT OUTER JOIN dbo.CATALOGU        ON dbo.ARTICLE.GA_ARTICLE     = dbo.CATALOGU.GCA_ARTICLE
                                       AND dbo.ARTICLE.GA_FOURNPRINC  = dbo.CATALOGU.GCA_TIERS
    LEFT OUTER JOIN dbo.ZWL_STOCKARTA   ON dbo.ARTICLE.GA_ARTICLE     = dbo.ZWL_STOCKARTA.QARTICLE
    LEFT OUTER JOIN dbo.ZW_TDES         ON dbo.ARTICLE.GA_ARTICLE     = dbo.ZW_TDES.YTS_ARTICLE
WHERE (dbo.DISPO.GQ_DEPOT                   = 'C')
  AND (dbo.ARTICLE.GA_FERME                 = '-')
  AND (dbo.ZWL_STOCKARTA.QATT               <> 0)
  AND (dbo.ZW_DATERECEPART.qtecartons       <> 0)
   OR (dbo.DISPO.GQ_DEPOT                   = 'C')
  AND (dbo.ARTICLE.GA_FERME                 = '-')
  AND (LEFT(dbo.ARTICLE.GA_CODEARTICLE, 1)  <> 'a')
  AND (LEFT(dbo.ARTICLE.GA_CODEARTICLE, 1)  <> 'b')
  AND (LEFT(dbo.ARTICLE.GA_CODEARTICLE, 1)  <> 'w')
  AND ((dbo.DISPO.GQ_PHYSIQUE - dbo.DISPO.GQ_RESERVECLI) > 0)
ORDER BY Code
Petit truc : prends systématiquement l'habitude d'aligner ton code. Tu dois bien voir que c'est quand même plus facile à suivre, on se perd moins. Essaye de reprendre ta requête originale et aligne la de la même manière, tu devrais voir très vite ce que j'ai modifié. Le résultat devrait également être différent à l'exécution.