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 :

Rechercher les données / équipement pour la date d'enregistrement la plus récente


Sujet :

Développement SQL Server

  1. #1
    Invité
    Invité(e)
    Par défaut Rechercher les données / équipement pour la date d'enregistrement la plus récente
    Bonjour,

    J'ai une table où l'on enregistre les données reçues pour des équipements.
    Cette table ressemble à cela:
    id, num_eq, date_reception, date_acquisition, data_1, data_2, data_3, ...
    Je n'arrive pas à extraire les données pour chaque équipement pour leur date_acquisition la plus récente.
    Sachant que les dates d'acquisition peuvent être inverses aux dates de réception (vidage d'un tampon).

    date_reception ------ date_acquisition
    18/08/2009 09:06:40 18/08/2009 09:06:17
    18/08/2009 09:06:40 18/08/2009 09:06:13
    18/08/2009 09:06:40 18/08/2009 09:06:11
    18/08/2009 09:06:41 18/08/2009 09:06:08
    18/08/2009 09:06:41 18/08/2009 09:06:03
    18/08/2009 09:06:41 18/08/2009 09:05:17
    18/08/2009 09:06:41 18/08/2009 09:05:13
    18/08/2009 09:06:41 18/08/2009 09:05:12
    18/08/2009 09:06:41 18/08/2009 09:05:08
    18/08/2009 09:06:41 18/08/2009 09:05:03

    Mais qu'elles peuvent être dans le même ordres.
    Faut-il passer par une procédure?
    Y a-t-il une commande autre que MAX() pour récupérer la ligne complète dont la date est la plus haute pour chaque équipement.

    Merci pour votre aide

    jlmag

  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Je n'ai pas trop compris le problème, mais je vais tenter quand même:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id, num_eq, date_reception, MAX(date_acquisition) AS date_acquisition, data_1, data_2, data_3
    FROM maTable
    GROUP BY id, num_eq, date_reception,data_1, data_2, data_3
    Cordialement,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  3. #3
    Invité
    Invité(e)
    Par défaut
    Re, merci pour la réponse

    C'est effectivement un début, mais comment mettre un DISTINCT sur le num_eq pour extraire la date la plus récente et seulement celle-ci de chaque équipement?

    Car avec votre exemple, le résultat me renvoie plusieurs lignes pour un équipement. En fait cela me retourne les 98 lignes mais classées par:

    equ_1 ..... sa date la plus récente
    equ_2 ..... sa date la plus récente
    equ_3 ..... sa date la plus récente
    equ_1 ..... sa date la plus récente -1
    equ_2 ..... sa date la plus récente -1
    equ_3 ..... sa date la plus récente -1

    Ce que je cherche c'est:
    equ_1 ..... sa date la plus récente
    equ_2 ..... sa date la plus récente
    equ_3 ..... sa date la plus récente

    Si j'ai des infos pour 3 équipements

    jlmag


    jlmag

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Si vous êtes sous SQL Server 2000 et plus, essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT E.id, E.num_eq, E.date_reception, E.date_acquisition, E.data_1, E.data_2, E.data_3, ... 
    FROM dbo.mesEquipements AS E
    JOIN (
    		SELECT num_eq, MAX(date_acquisition) AS maxDateAcquisition
    		FROM dbo.mesEquipements
    	) AS SUB
    ON E.num_eq = SUB.num_eq
    AND E.date_acquisition = SUB.maxDateAcquisition
    Si vous êtes au moins sous SQL Server 2005 ou plus, vous pouvez aussi écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    WITH
    	CTE_DATE_ACQ_LA_PLUS_RECENTE AS
    	(
    		SELECT num_eq, MAX(date_acquisition) AS maxDateAcquisition
    		FROM dbo.mesEquipements		
    	)
    SELECT E.id, E.num_eq, E.date_reception, E.date_acquisition, E.data_1, E.data_2, E.data_3, ...  
    FROM dbo.mesEquipements AS E
    JOIN CTE_DATE_ACQ_LA_PLUS_RECENTE AS C
    	ON E.num_eq = C.num_eq
    	AND E.date_acquisition = C.maxDateAcquisition
    @++

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je suis sous SQL SERVER 2005.
    Super, j'ai pas encore tout vérifier mais cela semble correct

    Faut juste ajouter un "GROUP BY num_eq" sur la table "temporaire" (je me trompe peut-être) CTE_DATE_ACQ_LA_PLUS_RECENTE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH
    	CTE_DATE_ACQ_LA_PLUS_RECENTE AS
    	(
    		SELECT num_eq, MAX(date_acquisition) AS maxDateAcquisition
    		FROM dbo.mesEquipements
    		GROUP BY num_eq
    	)
    SELECT E.id, E.num_eq, E.date_reception, E.date_acquisition, E.data_1, E.data_2, E.data_3, ...  
    FROM dbo.mesEquipements AS E
    JOIN CTE_DATE_ACQ_LA_PLUS_RECENTE AS C
    	ON E.num_eq = C.num_eq
    	AND E.date_acquisition = C.maxDateAcquisition
    J'avais essayé avec une jointure comme dans l'exemple SQL SERVER 2000, mais mon niveau étant ce qu'il est ....

    Merci,

    jlmag

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Effectivement j'ai oublié le GROUP BY

    @++

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/05/2011, 00h11
  2. Récupérer les données de deux champs date en un seul champ
    Par nicdouille dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/09/2009, 17h35
  3. [XL-2003] rechercher les données d'une feuille excel via une useform
    Par t'chi ben dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/04/2009, 11h12
  4. Rechercher les données entrecroisées
    Par sedam dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 16/06/2008, 12h48
  5. Regrouper les données par rapport à la date
    Par goldeagle dans le forum Access
    Réponses: 7
    Dernier message: 11/12/2006, 15h35

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