IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Suppression des lignes qui n'ont pas la plus grande valeur


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut Suppression des lignes qui n'ont pas la plus grande valeur
    Bonjour,

    J'ai un tableau avec deux colonnes.
    Je souhaite supprimer les lignes qui n'ont pas la valeur la plus grande sur ID2, mais pour chaque Id1. En gros pour chaque Id1, je garde la ligne ayant le plus grand Id2
    C'est du sql server
    Comment faire ?

    Merci beaucoup

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    CREATE TABLE [dbo].[MaTable](
    	[Id1] [int] NOT NULL,
    	[Id2] [int] NOT NULL,
     CONSTRAINT [PK_MaTable] PRIMARY KEY CLUSTERED 
    (
    	[Id1] ASC,
    	[Id2] ASC
    ) ON [PRIMARY]
    ) 
     
     
    GO
     
    INSERT INTO MaTable(Id1, Id2) VALUES(1,1);
    INSERT INTO MaTable(Id1, Id2) VALUES(1,2);
    INSERT INTO MaTable(Id1, Id2) VALUES(1,3);
    INSERT INTO MaTable(Id1, Id2) VALUES(2,2);
    INSERT INTO MaTable(Id1, Id2) VALUES(2,3);
    INSERT INTO MaTable(Id1, Id2) VALUES(2,4);
    INSERT INTO MaTable(Id1, Id2) VALUES(3,1);

    Résultat:
    1,3
    2,4
    3,1

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,
    Supprimer les lignes qui n'ont pas la plus grande valeur, revient à supprimer les lignes pour lesquelles il en existe d'autre avec une plus grande valeur.

    Donc en SQL:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    delete from matable t1
    where exist(select * from matable t2 where t2.id1 = t1.id1 and t2.id2 > t1.id2)

    Tatayo.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    J'ai ce message d'erreur: Incorrect syntax near 't1'.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 778
    Points
    30 778
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DELETE
    FROM    matable AS t1
    WHERE   EXISTS 
            (   SELECT  NULL 
                FROM    matable AS t2
                WHERE   t2.id1 = t1.id1 
                    AND t2.id2 > t1.id2
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Pas non toujours pas:

    Incorrect syntax near the keyword 'AS'.

    Mais avec un SELECT ça fonctionne

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM    matable AS t1
    WHERE   EXISTS 
            (   SELECT  NULL 
                FROM    matable AS t2
                WHERE   t2.id1 = t1.id1 
                    AND t2.id2 > t1.id2
            )
    ;

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Voilà j'ai réussi (il fallait mettre un second FROM)

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DELETE
    FROM    matable
    FROM  matable AS t1
    WHERE   EXISTS 
            (   SELECT  NULL 
                FROM    matable AS t2
                WHERE   t2.id1 = t1.id1 
                    AND t2.id2 > t1.id2
            )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 07/01/2015, 16h39
  2. Afficher des lignes qui n'ont pas de résultat
    Par Nessie37 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/10/2007, 17h11
  3. Réponses: 4
    Dernier message: 08/06/2006, 14h18
  4. UNION ? des lignes qui ne sont pas prises...
    Par fred23195 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/12/2005, 15h50
  5. la liste des clients qui n'ont pas acheter aucun article ...
    Par TéBeSsI dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/02/2004, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo