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

MS SQL Server Discussion :

Récupérer l'ID le plus récent


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 43
    Par défaut Récupérer l'ID le plus récent
    Bonjour à tous,

    Voilà je viens vous voir car je n'arrives pas vraiment à obtenir le résultat que je souhaiterais pour une requete SQL.

    En gros j'ai une table comme ceci :

    ID | Label |
    1 | Camion |
    2 | Camion |
    3 | Voiture |
    4 | Moto |
    5 | Moto |
    6 | Camion |

    PS : Mon champ ID est autoIncrément, du coup le dernier enregistrement rentré est le plus récent.

    Mon souhait serait de récupérer, pour chaque label distinct, la ligne la plus récente.
    Dans notre exemple, ca donnerait donc ceci :


    ID | Label |
    3 | Voiture |
    5 | Moto |
    6 | Camion |

    J'espère que je suis assez compréhensible...

    Je n'ai pas vraiment d'idée pour réaliser ça, je suis légèrement perdu

    D'avance merci pour votre aide

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Si la règle correspond bien à l'id maximum pour chaque catégorie, un simple agrégat suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      select max(id) as id, label
        from MaTable
    group by label

  3. #3
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 43
    Par défaut
    Merci pour ton aide Waldar.

    Malheureusement, en voulant simplifier au maximum mon exemple j'ai oublié de préciser que j'avais des valeurs pour ces labels.

    Un peu comme ceci :

    ID | Label | Valeur | Date
    1 | Camion | Bleu |
    2 | Camion | Rouge |
    3 | Voiture | Vert |
    4 | Moto | Noir |
    5 | Moto | Bleu |
    6 | Camion | Violet |

    Mais à la limite je peux faire une aggrégation sur seulement mes 2 premiers champs et refaire un left join avec ma table entière, non ?

    Je vais voir à ca

  4. #4
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 43
    Par défaut
    Problème résolu en faisant un LEFT JOIN avec la requete donnée précédemment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      SELECT max(id) AS id, label
        FROM MaTable
    GROUP BY label
    Merci beaucoup

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez même faire une jointure forte, voire un IN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
      FROM MaTable
     WHERE id IN (  SELECT max(id)
                      FROM MaTable
                  GROUP BY label);

  6. #6
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 43
    Par défaut
    Question bonus :

    Est-ce possible de faire une condition sur la jointure ?

    J'entend par la d'avoir un boolean qui me dit "Avoir les plus récents", et faire ma jointure (ou mon WHERE id IN ...) en fonction de ce boolean ?

    Une procédure du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DECLARE @A as bit
    set @A = 0
     
    select * from produits
     
    if @A = 0
    begin 
    inner join  blablabla
    end
    Ou alors je dois faire un copier/coller de ma procédure et faire un IF...ELSE... avec 2 traitements quazy identiques mais avec un WHERE différent ?

    En tout cas merci pour votre aide

Discussions similaires

  1. [VxiR2] Dans une colonne récupérer la date la plus récente
    Par BipBipBO dans le forum Deski
    Réponses: 10
    Dernier message: 06/01/2024, 15h55
  2. [VxiR2] Comment récupérer la version la plus récente?
    Par tibaldo13 dans le forum Designer
    Réponses: 5
    Dernier message: 03/02/2011, 10h15
  3. Récupérer la ligne la plus récente
    Par DeezerD dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/04/2007, 13h13
  4. récupérer le fichier le plus récent
    Par kifouillou dans le forum Langage
    Réponses: 24
    Dernier message: 26/01/2007, 00h04
  5. [MySQL 3.23] Récupérer la date la plus récente
    Par griese dans le forum Langage SQL
    Réponses: 10
    Dernier message: 19/12/2006, 14h19

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