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

Langage SQL Discussion :

[MySQL] regrouper les données sous un format différent


Sujet :

Langage SQL

  1. #1
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut [MySQL] regrouper les données sous un format différent
    Bonjour,

    Je crois que j'ai besion d'un guru SQL cette fois-ci.
    J'ai une liste de données associée à des capteurs. Voilà de quoi ressemble la table.

    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
     
    [DATE, CAPTEUR_ID, VALUE] 
    ... 
    "2006-01-01 00:00:00", 8, 8.76 
    "2006-01-01 00:00:00", 10, 8.41 
    "2006-01-01 00:00:00", 11, 0.45 
    "2006-01-01 00:00:00", 12, 66.63 
    "2006-01-01 00:00:00", 13, 5.04 
    "2006-01-01 00:00:00", 14, 149.72 
    "2006-01-01 00:05:00", 8, 8.76 
    "2006-01-01 00:05:00", 9, 0.41 
    "2006-01-01 00:05:00", 10, 8.41 
    "2006-01-01 00:05:00", 11, 0.47 
    "2006-01-01 00:05:00", 13, 5.02 
    ...
    Bien enttendu, j'ai aussi une table une table définissant la liste de
    tous ces capteurs, donc je connais le nombre de ces capteurs. Ici je donne que leur ID.

    J'aimerais si possible sortir une liste de ces données de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [DATE, CAPTEUR 1, CAPTEUR 2, CAPTEUR 3, CAPTEUR 4, ... ] 
    2006-01-01 00:00:00, 8.76, 8.41, 0.45, 66.63, 5.04, 149.72 
    2006-01-01 00:05:00, 8.76, 8.41, 8.47, NULL, 5.02, ... 
    ...
    Selon les connaissances de base que j'ai des requêtes SQL, je crois que qu'il faudrait effectuer une jointure sur ma table de capteurs afin de déterminer les colonnes qui seront affichées dans la table résultat (ci-haut) et par la suite regrouper les données par DATE. Mais je ne vois pas DU TOUT comment exécuter tout cela.

    Merci beaucoup pour votre aide.
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 99
    Points : 110
    Points
    110
    Par défaut
    J'ai bien peur que la requête à faire soit assez lourde, quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select a.date, b.value as capteur1, c.value as capteur2, ... 
    from nomtable a, nomtable b, nomtable c, ...
    where a.date = b.date and b.capteur_id = idcapteur1
    and a.date = c.date and c.capteur_id = idcapteur2
    and ...
    Le soucis, c'est que tu dois connaître le nombre de capteurs.

    J'espère que ça te satisfait, sinon, je vois pas trop.

  3. #3
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Il faudrait ecrire une stored proc qui fait la transposé d'une matrice dans une table temporaire Ahh les bons souvenir de la fac.... Sinon une solution (pas belles mais si tu as des soucis de perf) serait de créer une table qui serait mis à jour par des trigger lors de l'insertion sur la table principal.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  4. #4
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Bonjour,

    Je ne sais pas ce que vous en pensez mais je me propose 2 solutions :

    # - 1
    Retransposer ces données à l'aide d'une table fait par programmation sous C# (ASP .NET).

    # - 2
    Construire une procédure stockée qui créée une table temporaire avec toutes ces données. Pour débuter je récupère dans une table temporaire tous les capteurs que je désire (Leur nom). Ensuite à partir de cette table je construis une chaîne de commande qui construira la structure de ma table donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SET @stmt_text = "CREATE TEMPORARY TABLE 
    (
       @c1 AS VarChar(100),
       @c2 AS VarChar(100),
       ...
    )"
    À l'aide d'un curseur je balaye la liste de mes capteurs et je remplace les paramètres de cette chaîne ainsi cela construira une commande qui construira ma table temporaire avec les bonnes colonnes (c'est-à-dire mes capteurs).

    J'exécute cette commande à l'aide de ces commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PREPARE
    EXECUTE
    DEALLOCATE PREPARE
    Une fois tout ceci terminé, je retranspose par code toutes les données dans cette table avec un autre curseur....

    Bref c'est assez compliqué à expliquer mais je me demande toutefois si tout ce boucan sera plus pratique/rapide et voir même efficace que de le faire côté code.

    Merci.
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Personnellement, je préfèrerais la solution 1, pour plusieurs raisons :

    - Je sais gérer des tableaux multi-dimensionnels dynamiques dans mon langage de prog favori, et j'espère que toi aussi : or je ne connais pas la solution via une requête SQL "classique". C'est déjà une raison suffisante ...

    - Ta problématique s'apparente à du "data mining", donc de la mise en forme de données. Les spécialistes ont tendance à dire que les problèmes de cosmétique, ce n'est pas le boulot du serveur de données
    (cf http://sql.developpez.com/sqlaz/erreurs/#L9)

    C'est juste mon humble avis, toute autre est le bienvenu
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  6. #6
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Un gros merci à tous le monde je vais adopter la solution #1.
    Citation Envoyé par Xo
    Personnellement, je préfèrerais la solution 1, pour plusieurs raisons :

    - Je sais gérer des tableaux multi-dimensionnels dynamiques dans mon langage de prog favori, et j'espère que toi aussi : or je ne connais pas la solution via une requête SQL "classique". C'est déjà une raison suffisante ...

    - Ta problématique s'apparente à du "data mining", donc de la mise en forme de données. Les spécialistes ont tendance à dire que les problèmes de cosmétique, ce n'est pas le boulot du serveur de données
    (cf http://sql.developpez.com/sqlaz/erreurs/#L9)

    C'est juste mon humble avis, toute autre est le bienvenu
    Je suis entièrement d'accord avec ce que tu dis.
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/07/2010, 10h34
  2. [MySQL] Récupérer les données sous forme de tableau PHP MySQL
    Par brajae85 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 16/05/2008, 17h11
  3. supprimer les données de de table différentes
    Par argon dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/01/2006, 21h58
  4. dbExpress & MySQL : Recueillir les données de la bd
    Par Griswold dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/11/2005, 21h23

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