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 :

Filtre de plusieurs "Retry" (Status) dans la même table ?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    388
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Novembre 2004
    Messages : 388
    Par défaut Filtre de plusieurs "Retry" (Status) dans la même table ?
    Bonjour,

    Je ne sais pas trop comment faire ou quoi recherche sur internet pour ce que je souhaite faire, vous pourrez peut etre m'aidé ...

    J'ai dans une même table plusieurs nom de même machine avec un statut "retry" différant, je souhaite prendre la ligne pour chaque machine ayant la valeur "retry" la plus haute.

    Exemple :

    Machines - retry
    Computer1 - 1
    Computer1 - 2
    Computer1 - 3
    Computer2 - 1
    Computer3 - 1
    Computer3 - 2


    Le résultat que j'aimerais avoir est :
    Machines - retry
    Computer1 - 3
    Computer2 - 1
    Computer3 - 2

    Je ne suis pas un expert et je n'ai pas forcement les thermes technique lier a SQL

    En vous remerciant d'avance,

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    vous pouvez passer par une fonction fenêtrée :


    Dans ce genre (pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    WITH CTE AS (
        SELECT ROW_NUMBER() OVER(PARTITION BY Machines ORDER BY retry DESC) AS RN, *
        FROM LaTable
    )
    SELECT Machines, retry
    FROM CTE
    WHERE RN = 1
    ;

  3. #3
    Membre éprouvé
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    388
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Novembre 2004
    Messages : 388
    Par défaut
    Je ne suis pas sur de comprendre comment ça fonctionne mais ça fonctionne !

    Merci

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    ROW_NUMBER numérote les lignes par ordre décroissant de la collonne retry (ORDER BY retry DESC), en repartant à 1 pour chaque Machine (PARTITION BY Machines)
    Du coup, cela affecte 1 pour le dernier retry de chaque machine, il ne reste qu'a filtrer sur ces lignes.

    Vous pouvez lancer indépendamment la requete dans l'expression de table commune (CTE) pour voir le résultat de ROW_NUMBER

  5. #5
    Membre émérite

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 817
    Billets dans le blog
    2
    Par défaut
    de manière simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select Machines,max(retry) from LaTable group by Machines;

  6. #6
    Membre éprouvé
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    388
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Novembre 2004
    Messages : 388
    Par défaut
    Citation Envoyé par abdallah_mehdoini Voir le message
    de manière simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select Machines,max(retry) from LaTable group by Machines;
    ça n'a pas fonctionné
    Msg 8120, Level 16, State 1, Line 1
    Column '*********************' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/01/2010, 10h02
  2. [Requête] plusieurs champs dans une même table ayants la même source
    Par Christophe93250 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2006, 16h18

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