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 :

Echantillonnage par période élémentaire


Sujet :

Langage SQL

  1. #1
    Invité
    Invité(e)
    Par défaut Echantillonnage par période élémentaire
    Bonjour

    J'ai un problème tout simple, mais je ne trouve pas la solution...

    J'ai une table 'TData' à deux colonnes.
    Colonne 1 : de type DateTime ('valDate')
    Colonne 2 : de type real ('valeur')

    Je voudrais récupérer la date et l'heure (colonne 1) et la valeur maximum de chaque heure entière (colonne 2).
    C'est à dire le max des valeurs entre 0 et 1 heure pour le jour J, le max entre 1 et 2 heure pour le jour J ....le max entre 0 et 1 heure pour le jour J+1, etc...

    Vous auriez une solution ?

  2. #2
    Invité
    Invité(e)
    Par défaut Essai
    Je serais tenté d'écrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT valDate, MAX(valeur)
    FROM TData data1, TData data2
    WHERE Heure(data1.valDate) = Heure(data2.valDate)
        AND Jour(data1.valDate) = Jour(data2.valDate)
    Mais comment réaliser les fonctions 'Heure' (extraction de l'heure -0 à 23- à partir d'un TDateTime) et 'Jour' (extraction du n° de jour 1-365 à partir d'un TDateTime ) ?

    (Je travaille sur un serveur MS SQL)

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    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
    CREATE TABLE TDATA
    (valDate DATETIME,
     valeur  REAL)
     
    DELETE FROM TDATA
     
    INSERT INTO TDATA VALUES ('2005-06-25 11:10:09', 12.3)
    INSERT INTO TDATA VALUES ('2005-06-25 11:25:23', 4.56)
    INSERT INTO TDATA VALUES ('2005-06-25 13:16:09', 789)
    INSERT INTO TDATA VALUES ('2005-06-25 14:10:09', 0)
     
    SELECT CAST(FLOOR(CAST(valDate AS FLOAT)) AS DATETIME) AS JOUR, DATEPART(hour, valDate) AS HEURE,
           MAX(valeur) AS ValeurMax
    FROM   TDATA
    GROUP  BY CAST(FLOOR(CAST(valDate AS FLOAT)) AS DATETIME), 
           DATEPART(HOUR, valDate)
     
    JOUR                                                   HEURE       ValeurMax                
    ------------------------------------------------------ ----------- ------------------------ 
    2005-06-25 00:00:00.000                                11          12.3
    2005-06-25 00:00:00.000                                13          789.0
    2005-06-25 00:00:00.000                                14          0.0
    Attention SQL ne saurait inventer des données inexistantes : en l'occurrence la valeur 12h ne figure pas et il n'est pas possible de la faire figurer sans ajouter l'information par exemple au moyen d'une table supplémentaire.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Invité
    Invité(e)
    Par défaut Merci !
    C'est parfait, simple et efficace, merci !

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

Discussions similaires

  1. répartition d'une commande par période
    Par kimai81 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 01/11/2008, 01h07
  2. Grouper des résultats par période du jour
    Par Nuwanda dans le forum Langage SQL
    Réponses: 17
    Dernier message: 10/03/2008, 18h33
  3. Réponses: 5
    Dernier message: 05/09/2007, 09h37
  4. CA par périodes : optimisation requête
    Par Benj2007 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/08/2007, 09h04
  5. Faire des moyennes par période
    Par Nessie37 dans le forum Requêtes et SQL.
    Réponses: 27
    Dernier message: 23/08/2007, 10h39

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