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 :

Sélection de la dernière donnée de chaque heure [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut Sélection de la dernière donnée de chaque heure
    Bonjour,

    je sèche complétement sur une requête et fait donc appel à vous.

    La structure de table :
    ID - bigint
    VarName - varchar
    VarValue - real
    VarTime - datetime

    la table en question contient les valeurs remontées par un système de surveillance d'une machine.
    Dans "VarName", on trouve le nom d'un compteur supervisé, dans "VarValue" la valeur du compteur supervisé et dans "VarTime" l'heure à laquelle l'info a été transmise.
    Les données arrivent plus ou moins toutes les 15 minutes, mais il n'y a pas d'heure fixe, il peut s'écouler 14 comme 16 minutes entre deux envois.

    Je cherche à sélectionner, pour chaque "VarName" et la date du jour, la dernière "VarValue" par heure.

    Avec le jeu de donnée suivant, je voudrais en fait récupérer les éléments en gras :
    1 - C1 - 1250,15 - 2015-02-24 08:14:15 000
    2 - C1 - 1258,25 - 2015-02-24 08:32:15 000
    3 - C1 - 1262,02 - 2015-02-24 08:45:15 000
    4 - C1 - 1294,41 - 2015-02-24 08:59:15 000
    5 - C1 - 1300,15 - 2015-02-24 09:15:15 000
    6 - C1 - 1312,25 - 2015-02-24 09:31:15 000
    7 - C1 - 1324,02 - 2015-02-24 09:41:15 000
    8 - C1 - 1326,41 - 2015-02-24 09:58:15 000
    9 - C2 - 612,01 - 2015-02-24 08:13:15 000
    10 - C2 - 620,25 - 2015-02-24 08:31:15 000
    11 - C2 - 623,02 - 2015-02-24 08:46:15 000
    12 - C2 - 624,41 - 2015-02-24 08:59:15 000
    13 - C2 - 660,15 - 2015-02-24 09:16:15 000
    14 - C2 - 671,25 - 2015-02-24 09:32:15 000
    15 - C2 - 684,02 - 2015-02-24 09:44:15 000
    16 - C2 - 700,41 - 2015-02-24 09:59:15 000

    Pas de problème pour partitionner les enregistrements par propriété, mais je ne vois pas comment récupérer la valeur max par heure et je sèche complétement.

    Si quelqu'un peut m'aiguiller

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    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 770
    Points : 52 726
    Points
    52 726
    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
    WITH T AS (
    SELECT *,
           RANK() OVER(PARTITION BY CAST(VarTime AS DATE), HOUR(VarTime) ORDER BY VarTime) AS RANG
    FROM   ???       
    )       
    SELECT *
    FROM   T
    WHERE  RANG = 1;
    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/ * * * * *

  3. #3
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Merci SQLPro.

    J'ai un soucis avec votre proposition :
    'HOUR' n'est pas une option nom de fonction intégrée reconnue.

    Vous vouliez indiquer "datepart(hour", c'est plutôt cela ?

  4. #4
    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 803
    Points
    30 803
    Par défaut
    En effet, datepart(hour, var_time) fonctionne mieux et surtout order by var_time desc pour avoir la dernière ligne de chaque heure, et pas la première.
    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.

  5. #5
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Après quelques modifications, la requête me renvoie ce que je souhaite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WITH T AS (
    SELECT *,
           RANK() OVER(PARTITION BY CAST(VarTime AS DATE), datepart(HOUR,VarTime), VarName ORDER BY VarTime desc) AS RANG
    FROM   Table
    )       
    SELECT *
    FROM   T
    where RANG = 1
    AND DATEADD(day, DATEDIFF(day, 0, T.VarTime), 0) = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
    ORDER BY VarName,  RANG
    J'ai juste ajouté une partition de plus sur VarName et filtré sur les résultats du jour.

    Merci SQLPro.

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

Discussions similaires

  1. sélection des dernières données
    Par BEAUXOEIL dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 02/10/2009, 11h14
  2. Réponses: 16
    Dernier message: 03/06/2009, 05h14
  3. Réponses: 11
    Dernier message: 27/03/2008, 22h48
  4. [Crystal Reports] Sélection de Base de Données
    Par coucoucmoi dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 16/11/2004, 16h52
  5. Requete de sélection des 5 dernièrs entrées.
    Par WriteLN dans le forum Administration
    Réponses: 4
    Dernier message: 22/03/2004, 21h40

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