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 :

[SELECT DISTINCT] [Débutant] Ne garder qu'une ligne par id


Sujet :

MS SQL Server

  1. #1
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut [SELECT DISTINCT] [Débutant] Ne garder qu'une ligne par id
    Bonjour,
    je débute MS-SQL et je suis perdu.
    Je travaille sur une seule table (log) :
    {ID}{Date}{NumPiece}{.......}
    J'essaye d'afficher les enregistrements des 2 dernières minutes mais je ne voudrait garder que la dernière ligne de chaque NumPièce.
    En gros j'essaye de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct NumPiece from log
    where
       DateHeure>DATEADD(mi,-2,getdate())
    Le problème c'est que cette requête ne me retourne que le NumPièce et j'ai besoin de toutes les autres colonnes et si je rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...distinct NumPiece , .......
    je récupère plusieurs lignes avec le même NumPiece...
    Désolé cela semble bête mais je ne m'en sors pas !
    Merci d'avance.
    Pensez aux règles et au qui rime avec !

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Au lieu du distinct, prenez un max + group by
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut
    Merci de la réponse mais je n'arrive pas au résultat escompté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select  max(Dateheure) as test , NumPiece , x, y, z
    from log
    where 
    DateHeure>DATEADD(mi,-2,getdate())
    group by NumPiece , x, y, z
    order by test desc
    En fait cela me fait un quand même apparaître plusieurs ligne avec le même NumPiece.
    Merci d'avance de votre aide.
    Pensez aux règles et au qui rime avec !

  4. #4
    Membre régulier Avatar de layouni
    Inscrit en
    Mai 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 119
    Points : 110
    Points
    110
    Par défaut Requete imbriquer
    Bonjour


    tu peux utiliser deux requete imbriquer


    select *
    from Nomtable
    where id in (select distinct id from Nomtable where dateHeurs >......)


    A+

    N’acceptez jamais la défaite, vous êtes peut-être à 2 doigts de la réussite.

  5. #5
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut
    Merci,
    j'essaye ceci mais je bute encore sur un problème,
    en effet j'utilise ce que m'a suggéré fadace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select max(DateHeure), NumPiece 
    	from log
    	where DateHeure>DATEADD(mi,-2,getdate())
    	group by NumPiece
    Ceci m'isole bien la dernière ligne de chaque NumPiece.
    Mais je n'arrive pas à récupérér toutes les autres information correspondantes même en l'encapsulant dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select *
    from log
    where DateHeure in
    (
    J'obtiens l'erreur suivante :
    Une seule expression peut être spécifiée dans la liste de sélection quand la sous-requête n'est pas introduite par EXISTS.
    Merci d'avance je suis complètement bloqué avec cette requête.
    Pensez aux règles et au qui rime avec !

  6. #6
    Membre régulier Avatar de layouni
    Inscrit en
    Mai 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 119
    Points : 110
    Points
    110
    Par défaut la requête !
    Salut


    est-ce que tu m'envoyer la totalité de requête pour vérifier le syntaxe


    A+

    N’acceptez jamais la défaite, vous êtes peut-être à 2 doigts de la réussite.

  7. #7
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut Re: la requête !
    Merci de ton aide,
    voici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select *
    from log
    where DateHeure in
    (
    	select max(DateHeure), NumPiece 
    	from log
    	where DateHeure>DATEADD(m,-2,getdate())
    	group by NumPiece 
    )
    Pensez aux règles et au qui rime avec !

  8. #8
    Membre régulier Avatar de layouni
    Inscrit en
    Mai 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 119
    Points : 110
    Points
    110
    Par défaut Un seul champ
    Salut


    la deuxieme requête ne doit comprendre qu'un seul champs

    select *
    from log
    where NumPiece in
    (
    select NumPiece
    from log
    where DateHeure>DATEADD(m,-2,getdate())
    group by NumPiece
    )


    A+

    N’acceptez jamais la défaite, vous êtes peut-être à 2 doigts de la réussite.

  9. #9
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut Re: Un seul champ
    Au niveau syntaxe ça marche mais je me retrouve avec plusieurs lignes contenant le même numPiece.
    En fait ce numPiece est présent environ 4* par min avec 16 numéros différents.
    Donc sur 2 min il faut que je garde que la dernière ligne de chaque numPiece et je n'y arrive vraiment pas....
    Pensez aux règles et au qui rime avec !

  10. #10
    Membre régulier Avatar de layouni
    Inscrit en
    Mai 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 119
    Points : 110
    Points
    110
    Par défaut Une autre proposition
    Salut


    tu peux essayer cette proposition

    select *
    from log
    where NumPiece in
    (
    select NumPiece
    from log
    where DateHeure>DATEADD(m,-2,getdate())
    group by NumPiece
    having DateHeure=max(DateHeure)
    )

    N’acceptez jamais la défaite, vous êtes peut-être à 2 doigts de la réussite.

  11. #11
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut Re: Une autre proposition
    La colonne 'log.DateHeure' n'est pas valide dans la clause HAVING parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.
    En fait je n'en suis pas très loin mais ça bloque...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select max(DateHeure), NumPiece 
    	from log
    	where DateHeure>DATEADD(mi,-2,getdate())
    	group by NumPiece
    Ceci me ramène bien les enregistrements recherché (le dernier de chaque NumPiece) mais je n'accède pas à toutes les colones de ces enregistrements, je n'ai que le DateHeure et le NumPiece....
    Pensez aux règles et au qui rime avec !

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/08/2012, 03h31
  2. [VBA-E]selection un plage de cellules d'une ligne
    Par k-eisti dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/04/2007, 14h56
  3. Réponses: 2
    Dernier message: 04/01/2007, 16h17
  4. Réponses: 3
    Dernier message: 19/09/2005, 13h20
  5. Réponses: 3
    Dernier message: 29/08/2005, 16h44

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