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 :

Demande d'aide pour la création d'une requête SQL


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 9
    Points
    9
    Par défaut Demande d'aide pour la création d'une requête SQL
    Bonjour,

    j'aurais besoin d'aide sur la création d'une requête SQL

    Je cherche en UNE requête récupérer la DERNIERE Valeur enregistré qui correspond au Batiment='Loire' ET à tous les équipements qui ont le NomEquipement='B01'.



    Table_point
    ID NomDuPoint Batiment Desciption Nature Localisation Equipement NomEquipement Unité
    132 VJ2.CLIM.CTA.CTA_B01.T_AMB.ETE_PC Loire Consigne été CTA B01 Consigne été Terrasse CTA B01 °C
    133 VJ2.CLIM.CTA.CTA_B01.T_AMB.HIVER_PC Loire Consigne hiver CTA B01 Consigne Hiver Terrasse CTA B01 °C
    134 VJ2.CLIM.CTA.CTA_B01.ETE_HIVER Loire Mode été/hiver CTA B01 Mode Fonctionnement Régualtion Terrasse CTA B01
    135 VJ2.CLIM.CTA.CTA_B02.T_AMB.ETE_PC Loire Consigne été CTA B02 Consigne été Terrasse CTA B02 °C
    136 VJ2.CLIM.CTA.CTA_B02.T_AMB.HIVER_PC Loire Consigne hiver CTA B02 Consigne Hiver Terrasse CTA B02 °C
    137 VJ2.CLIM.CTA.CTA_B02.ETE_HIVER Loire Mode été/hiver CTA B02 Mode Fonctionnement Régualtion Terrasse CTA B02

    Table_donnees
    Id Id_point Date_Heure Valeur
    12345 132 20/10/2015 15:00 26
    12346 167 21/10/2015 16:34 66.0
    12347 132 20/10/2015 19:00 25.5
    12348 133 23/10/2015 09:22 22
    12349 180 24/10/2015 04:33 0
    12350 170 26/10/2015 09:11 33.0
    12351 134 28/10/2015 19:09 1
    12352 133 23/10/2015 19:22 23



    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
    21
    22
    23
    24
     
    SELECT TOP 10
    	table_donnees.Valeur AS Valeur,	
    	table_donnees.Date_Heure AS Date_Heure,	
    	table_points.NomBatiment AS NomBatiment,	
    	table_points.NomEquipement AS NomEquipement,	
    	MAX(table_donnees.id) AS le_maximum_id
    FROM 
    	table_donnees,	
    	table_points
    WHERE 
    	table_points.id = table_donnees.id_Point
    	AND
    	(
    		table_points.NomBatiment = 'Loire'
    		AND	table_points.NomEquipement = 'B01'
    	)
    GROUP BY 
    	table_donnees.Valeur,	
    	table_donnees.Date_Heure,	
    	table_points.NomBatiment,	
    	table_points.NomEquipement
    ORDER BY 
    	le_maximum_id DESC

    Comment modifié la requête pour obtenir cela

    132 20/10/2015 19:00 25.5
    133 23/10/2015 19:22 23
    134 28/10/2015 19:09 1


    Cordialement

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Select col1, col2,... coln
    from Table_Point PT
    inner join table_Donnees DN
       on DN.ID = PT.ID
    Where PT.NomEquipement = 'B01'
      and DN.Date_Heure =
         (select max(Date_Heure) 
          from table_Donnees D2
          where D2.ID = DN.ID)
    Ajoutez un "distinct" si vous pouvez avoir des doublons pour vos colonnes avec la même date-heure

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 9
    Points
    9
    Par défaut
    Merci pour ta réponse mais j'ai encore un probléme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Select 
    table_donnees.Date_Heure,	
    table_donnees.Valeur,
    table_points.NomBatiment,
    table_points.NomEquipement
    from Table_Point PT
    inner join table_Donnees DN
       on DN.Id_Point = PT.Id
    Where PT.NomEquipement = 'B01'
      and DN.Date_Heure =
         (select max(Date_Heure) 
          from table_Donnees D2
          where D2.ID = DN.ID)
    J'ai ajouter

    table_donnees.Date_Heure,
    table_donnees.Valeur,
    table_points.NomBatiment,
    table_points.NomEquipement

    puis modifier la ligne ON DN.ID = PT.ID en on DN.Id_Point = PT.Id

    j'ai pas compris les ligne suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     and DN.Date_Heur
         (select max(Date_Heure) 
          from table_Donnees D2
          where D2.ID = DN.ID)
    de plus je pense qu'il manque une condition c'est NomBatiment

    je continue mes recherches.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par defcom60 Voir le message
    j'ai pas compris les ligne suivantes:
    and DN.Date_Heur
    (select max(Date_Heure)
    from table_Donnees D2
    where D2.ID = DN.ID)
    Cette sous-requete permet de répondre à votre post initial dans lequel vous précisiez : "Je cherche en UNE requête récupérer la DERNIERE Valeur enregistrée"

    Citation Envoyé par defcom60 Voir le message
    de plus je pense qu'il manque une condition c'est NomBatiment
    Comme dans votre jeu d'essai, tous les batiments s'appellent "loire" je n'ai pas mis de filtre sur cette colonne, ajoutez un filtre si votre jeu d'essai est plus riche bien sur

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Cette sous-requete permet de répondre à votre post initial dans lequel vous précisiez : "Je cherche en UNE requête récupérer la DERNIERE Valeur enregistrée"


    Comme dans votre jeu d'essai, tous les batiments s'appellent "loire" je n'ai pas mis de filtre sur cette colonne, ajoutez un filtre si votre jeu d'essai est plus riche bien sur
    j'ai une erreur quand j'exécute la requête dans PhpMyadmin

    la requête est la suivante:

    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
     
    SELECT
    table_points.NomEquipement,
    table_points.NomBatiment,
    table_donnees.Date_Heure,	
    table_donnees.Valeur
    FROM table_points PT
    INNER JOIN table_donnees DN
       ON DN.Id_Point = PT.Id
    WHERE PT.NomEquipement = 'B01'
      AND PT.NomBatiment= 'Loire'	
      AND DN.Date_Heure =
         (SELECT MAX(Date_Heure) 
          FROM table_donnees D2
          WHERE D2.Id = DN.Id)
    j'ai comme erreur

    MySQL a répondu: Documentation
    #1054 - Unknown column 'table_points.NomEquipement' in 'field list'

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par defcom60 Voir le message
    j'ai comme erreur

    MySQL a répondu: Documentation
    #1054 - Unknown column 'table_points.NomEquipement' in 'field list'
    Même sans être anglophone averti, il me semble que le message est clair : votre colonne ne s'appelle pas comme indiqué dans la requête.
    Vérifiez dans vos tables et corrigez la requête en conséquence

  7. #7
    J1
    J1 est déconnecté
    Membre averti Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Points : 335
    Points
    335
    Par défaut
    Bonjour,

    Les colonnes indiquées dans le SELECT sont préfixées par les noms de tables originaux ("table_points" et "table_donnees") alors que des alias ("PT" et "DN") ont été définis dans la clause FROM.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 9
    Points
    9
    Par défaut
    Comment corriger ma requête car là je suis perdu ?

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Soit vous utilisez systématiquement les alias :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT
    PT.NomEquipement,
    PT.NomBatiment,
    DN.Date_Heure,	
    DN.Valeur
    FROM table_points PT
    INNER JOIN table_donnees DN
       ON DN.Id_Point = PT.Id
    WHERE PT.NomEquipement = 'B01'
      AND PT.NomBatiment= 'Loire'	
      AND DN.Date_Heure =
         (SELECT MAX(Date_Heure) 
          FROM table_donnees D2
          WHERE D2.Id = DN.Id)
    Soit vous ne les utilisez pas du tout, mais du coup, c'est lourd à coder, et de toutes façon pour le subquery, pas le choix puisque la même table est présente 2 fois

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 9
    Points
    9
    Par défaut
    Merci pour votre aide mais il y a encore une chose qui ne va pas, la requête me renvoie tous les valeurs par catégorie et non la Valeur la plus récente

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Cette requête vous renvoie la combinaison PT.NomEquipement, PT.NomBatiment, DN.Valeur avec la DN.Date_Heure la plus récente
    Que voudriez vous obtenir ?

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 9
    Points
    9
    Par défaut
    Actuellement la requête ne me renvoie pas la valeur la plus récente mais l'intégralité des dates de chaque catégorie.

    Je souhaite juste avoir la dernière valeur de chaque catégorie.

  13. #13
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Je pense que c'est juste dû a une petite erreur dans la sous requete corrélée, sur le dernier filtre qui devrait se rapporter à l'id_point de la table des points.

    essayez ceci :
    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
     
    SELECT
    PT.NomEquipement,
    PT.NomBatiment,
    DN.Date_Heure,	
    DN.Valeur
    FROM table_points PT
    INNER JOIN table_donnees DN
       ON DN.Id_Point = PT.Id
    WHERE PT.NomEquipement = 'B01'
      AND PT.NomBatiment= 'Loire'	
      AND DN.Date_Heure =
         (SELECT MAX(Date_Heure) 
          FROM table_donnees D2
          WHERE D2.Id_point = PT.Id)

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 9
    Points
    9
    Par défaut
    Merci cela fonctionne

  15. #15
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,

    Je pense que c'est juste dû a une petite erreur dans la sous requete corrélée, sur le dernier filtre qui devrait se rapporter à l'id_point de la table des points.

    essayez ceci :
    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
     
    SELECT
    PT.NomEquipement,
    PT.NomBatiment,
    DN.Date_Heure,	
    DN.Valeur
    FROM table_points PT
    INNER JOIN table_donnees DN
       ON DN.Id_Point = PT.Id
    WHERE PT.NomEquipement = 'B01'
      AND PT.NomBatiment= 'Loire'	
      AND DN.Date_Heure =
         (SELECT MAX(Date_Heure) 
          FROM table_donnees D2
          WHERE D2.Id_point = PT.Id)
    je dois changer de lunettes ou bien ? je ne vois aucune différence avec ma requete...
    EDIT : ah oui vu, effectivement id_point n'était pas dans la bonne table, merci pour cette correction

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

Discussions similaires

  1. Demande d'aide en SQL
    Par ouissam dans le forum Oracle
    Réponses: 2
    Dernier message: 22/09/2007, 16h35
  2. Aide Requête SQL
    Par jjg65 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/07/2007, 10h37
  3. Aide requête SQL - UPDATE phpmyadmin
    Par laulau37 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/06/2007, 10h19
  4. Aide requête sql
    Par viny dans le forum PostgreSQL
    Réponses: 18
    Dernier message: 14/09/2006, 21h31
  5. Aide Requête SQL (UPDATE)
    Par Glowprod dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/07/2006, 14h04

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