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 :

Extraire les données les plus récentes


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Extraire les données les plus récentes
    Bonjour,
    A partir d'une requêtes SQL, je récupère un ensemble de données sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Date		             	1                      51                     52                     
    ----------------------- 	---------------------- ---------------------- ---------------------- 
    2012-02-15 12:28:14.000 	20101109095204         497                    186                    
    2012-02-15 12:23:36.000 	20101031131309         252                    420                    
    2012-02-15 12:23:19.000 	20101031131309         40                     350
    Ces données représentent un suivi de production. La colonne [1] correspond au numéro de lot, les colonnes [51] et [52] représentent des variables de production à conserver pendant 10 ans.
    Je souhaiterais depuis cette table pouvoir récupérer uniquement les dernières entrées pour chacun des numéros de lot [1]. Dans l'exemple, je souhaiterais pouvoir discriminer "2012-02-15 12:23:19.000 20101031131309" qui est une donnée plus ancienne que "2012-02-15 12:23:36.000 20101031131309".

    La requête qui permet d'obtenir ce jeu de données utilise un PIVOT. Le "GROUP BY" ne me permet pas d'assurer l'obtention de la donnée la plus récente.

    Avez-vous une idée d'une méthode qui me permettrait d'extraire de la table ci-dessus le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Date				1                      51                     52                     
    ----------------------- 	---------------------- ---------------------- ---------------------- 
    2012-02-15 12:28:14.000 	20101109095204         497                    186                    
    2012-02-15 12:23:36.000 	20101031131309         252                    420
    Je vous remercie par avance pour le petit coup de pouce ...
    Charles.

  2. #2
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    Avez vous essayé de comparer votre champ date au MAX des dates avec une sous requête corrélée? Cela devrait répondre à votre problème.
    Sinon, un peu de lecture sur les opérations de regroupement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Je vous remercie pour votre réponse.
    Le fait d'utiliser un PIVOT m'empêche d'utiliser les regroupements, puisqu'à priori SQL est incapable de déterminer sur quel critère opérer le regroupement. Je ne souhaite ni sommer, ni obtenir le maximum du regroupement, mais bien obtenir la dernière entrée en date.

    Pour se donner une idée plus claire de la requête initiale, voici son code :
    Code : 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
    SELECT DateAndTime,  [1], [51], [52], [53], [54]
    FROM (
     
    	SELECT FloatTable.DateAndTime, FloatTable.Val, TagTypeList.TagTypeId
    	FROM FloatTable	
     
    	RIGHT JOIN TagList ON TagList.TagIndex = FloatTable.TagIndex
    	RIGHT JOIN TankAllocation ON TankAllocation.TagId = TagList.TagIndex
    	RIGHT JOIN TankList ON TankList.TankId = TankAllocation.TankId
     
    	RIGHT JOIN TagTypeAllocation ON TagTypeAllocation.TagId = TagList.TagIndex
    	RIGHT JOIN TagTypeList ON TagTypeList.TagTypeId = TagTypeAllocation.TagTypeId
    ) p						
     
    PIVOT
    (
    	MIN(p.Val)
    	FOR TagTypeId IN ([1], [51], [52], [53], [54])
    ) pvt 	
    ORDER BY [1] DESC
    Pour information, les colonnes [1], [51], [52], [53], [54] sont en fait déterminées automatiquement au sein d'une procédure stockée, puisque l'on ne connait pas à priori le nombre de variables de production à conserver. Ces variables sont stockées dans la table TagTypeList.

    La requête précédente permet d'obtenir le jeu de données suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Date		             	1                      51                     52                     
    ----------------------- 	---------------------- ---------------------- ---------------------- 
    2012-02-15 12:28:14.000 	20101109095204         497                    186                    
    2012-02-15 12:23:36.000 	20101031131309         252                    420                    
    2012-02-15 12:23:19.000 	20101031131309         40                     350
    J'imagine qu'il faut depuis ce jeu de résultats créer une requête permettant d'obtenir pour chaque lot [1], l'enregistremente le plus récent. Je ne vois pas comment opérer cette manipulation de données.
    En vous remerciant.

  4. #4
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    En se basant sur votre premier message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with maTable (maDate,numLot,varprod1,varprod2) as 
    (select '2012-02-15 12:28:14.000',20101109095204,497,186 UNION ALL
     select '2012-02-15 12:23:36.000',20101031131309,252,420 UNION ALL
     select '2012-02-15 12:23:19.000',20101031131309,40,350)
     
    select t1.madate, t1.numLot, t1.varprod1, t1.varprod2
    from maTable t1
    where madate = (select max(t2.madate)
    		from matable t2
    		where t2.numLot=t1.numLot)
    order by madate
    me renvoie bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Date				1                      51                     52                     
    ----------------------- 	---------------------- ---------------------- ---------------------- 
    2012-02-15 12:28:14.000 	20101109095204         497                    186                    
    2012-02-15 12:23:36.000 	20101031131309         252                    420
    Vous pourriez ainsi changer le WITH (définition+contenu) par votre requête.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Parfait, c'est exactement ce qu'il me fallait.
    Je vous remercie.

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

Discussions similaires

  1. [MySQL] extraire les données de plus d'un an
    Par le nOoB dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/12/2011, 11h53
  2. [XL-2002] Fonction pour chercher les données les plus commune
    Par sergio_gr66 dans le forum Excel
    Réponses: 1
    Dernier message: 24/06/2011, 19h29
  3. Réponses: 2
    Dernier message: 25/09/2010, 08h38
  4. [PPT-2007] Extraire par VBA les données IPTC d'une photo
    Par jeff1494 dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 01/05/2010, 23h13
  5. Réponses: 12
    Dernier message: 14/02/2008, 04h31

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