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 :

Requête tordue sous Access


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 32
    Points : 28
    Points
    28
    Par défaut Requête tordue sous Access
    Bonjour,

    Je ne m'en sors pas avec une requête. J'ai la table suivante :
    ID : int
    Date : date
    Température : réel
    Humidité : entier

    Les enregistrements qu'elle contient sont séparés de 15 minutes chaque fois (champ Date).
    La requête que je dois réaliser est la suivante (sous Access) : récupérer les dates (date de début) pour lesquelles la température est située entre 22° et 24° (pendant 6h d'affilés) et où l'humidité est >= 40 (pendant 6h d'affilés).
    Vous vous en doutez, ce qui me pose problème est ce satané "pendant 6h d'affilés"...

    Vous avez une idée ?
    Merci !

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Beau problème !

    Je vais supposer que ta table s'appelle Observations. Je te propose une démarche en plusieurs étapes :

    1/ Créer un Planning des observations. Cela se fait assez facilement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT DateHeure INTO Planning
    FROM Observations ;
    2/ Avec un produit cartésien de ce planning par lui-même, constituer la table des périodes de six heures possibles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT PDeb.DateHeure AS Deb, PFin.DateHeure AS Fin INTO Periodes
    FROM Planning AS PDeb, Planning AS PFin
    WHERE PFin.DateHeure - PDeb.DateHeure BETWEEN (6/24 - 5/60/24) AND (6/24 + 5/60/24)
    Mon 5/60/24 représente une tolérance de plus ou moins 5 minutes dans l'horodatage de tes observations (ce serait plus simple de se fonder sur les ID, mais ça réduit le problème au cas particulier où il n'y a qu'un site d'observation...).

    3) A partir de cette table des périodes, rechercher celles qui comptent 25 observations (donc 6h) correspondant aux critères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT P.Deb
    FROM Periodes AS P
      INNER JOIN Observations AS O ON O.DateHeure BETWEEN P.Deb AND P.Fin
    WHERE O.Temperature BETWEEN 22 AND 24 
      AND Humidite >= 40
    GROUP BY P.Deb
    HAVING COUNT(P.ID) = 25
    4) tu vas avoir des recouvrements (par ex. si les critères sont respectés de 10h à 17h, les plages possibles sont 10h/16h, 10h15/16h15, etc. Je ne sais pas comment tu veux les gérer.

    5) à terme, ce serait évidemment préférable de remplacer Planning par une version prévoyant le futur...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Il y a une autre manière d'aborder le problème.
    Trouver les dates pour lesquelles il n'y a aucune valeur sortant des limites dans les six heures suivantes...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  dat.date
    FROM    matable AS dat
    WHERE   NOT EXISTS
            (   SELECT  1
                FROM    matable AS exc
                WHERE   NOT (   exc.temperature BETWEEN 22 AND 24
                            AND  exc.humidite >= 40 )
                    AND exc.dat BETWEEN dat.date AND dat.date + 6/24                
            )
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Salut Al1 !

    Excellent !
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Eventuellement un petit ajout à la solution, selon l'interprétation de l'énoncé :
    Exclure les dernières mesures, pour lesquelles il n'y a pas de mesure 6 heures après. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT  dat.date
    FROM    matable AS dat
      CROSS JOIN (SELECT max(date) as maxd  
                        FROM matable) tmax
    WHERE   NOT EXISTS
            (   SELECT  1
                FROM    matable AS exc
                WHERE   NOT (   exc.temperature BETWEEN 22 AND 24
                            AND  exc.humidite >= 40 )
                    AND exc.dat BETWEEN dat.date AND dat.date + 6/24                
            )
       AND dat.date <= tmax.maxd - 6 / 24

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 32
    Points : 28
    Points
    28
    Par défaut
    Merci pour vos réponses rapides !

    Je vais plutôt utiliser la deuxième solution parce qu'elle est plus compréhensible pour un simple être humain comme moi

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

Discussions similaires

  1. pagination avec des requêtes sql sous access
    Par zalalus dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/11/2007, 23h14
  2. Requête concaténage sous Access
    Par sucreMan dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 08/10/2007, 18h09
  3. Requête délicate sous Access 2eme partie
    Par Cracat dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 10/07/2007, 19h51
  4. requêtes imbriquées sous Access
    Par Smix007 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/06/2007, 14h37
  5. requête sql sous access
    Par jadey dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/08/2006, 21h20

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