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

Requêtes PostgreSQL Discussion :

Grouper par intervalle d'une heure avec une incrémentation de minute


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Grouper par intervalle d'une heure avec une incrémentation de minute
    Bonjour,

    Veuillez m'excuser si la question parait bizarre.

    J'ai une base contenant des données par minute avec donc une colonne de type timestamp et d'autres de type int. Je souhaiterais savoir si c'est possible d'établir une requête qui permet faire la somme des valeurs groupées par heure mais présenté par exemple de cette manière :

    date heure somme
    2019-06-26 00:00 - 01:00 200
    2019-06-26 00:01 - 01:01 205
    2019-06-26 00:02 - 01:02 203
    2019-06-26 00:03 - 01:03 201

    L'heure de début s'incrémente d'une minute avec un intervalle d'une heure pour avoir l'heure de fin et la somme est effectuée entre ces deux périodes.

    Si quelqu'un pourrait m'aider.

    Merci.

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Bonjour bonjour

    Juste pour être sûr, tu as bien une colonne date et une colonne heure ?

    Ensuite, question bête mais... Tu vas rajouter un filtre ou non ? (Sur la date du jour par exemple) Parce que si non, en fonction de ta base et du nombre de lignes, tu peux vite te retrouver avec une usine à gaz non ?

    Bisous

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Merci pour la réponse.

    Dans la base, j'ai une colonne "date" de type timestamp et les autres autres colonnes (il y en a 183) c'est de type int.

    Oui vous avez raison il y aura beaucoup de données sinon mais il y a bien sûr un filtre sur l'heure (obtenu à partir du timestamp) donc il sera compris entre 00 et 11 et sur une période de date.

    Merci.

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Bonjour bonjour,

    Tout d'abord => Poster la même question à deux endroits différents n'est peut-être pas plus productif

    Pour répondre à ta question, en soit, tout est possible. Maintenant, il faut voir les performances... Je n'ai pas de postgresql sous la main pour tester mais un exemple de piste que tu peut avoir serait :

    Pour ton laps de temps données, faire une requête avec ton select count(*), mettre dans le where ta condition de date puis grouper par timestamps toute les heures
    Tu pourrais par exemple t'appuyer sur ce post pour la notion d'intervale en changeant juste le calcul.
    https://gis.stackexchange.com/questi...tes-postgresql

    Ensuite, le fait de devoir commencer cela pour toutes les minutes, là je dois avouer que ca semble être tuer une mouche avec un bazooka. Quel en est le besoin final ?

    Peut-etre qu'une autre âme charitable saura venir donner son avis

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    J'ai pas bien compris où s'arrêtait les tranches, mais vous pouvez par exemple combiner generate_series et lead dans une CTE, pour générer les tranches dans lesquels vous allez répartir les données agrégées :
    Series Generating Functions

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      with tranche as (
    SELECT * FROM generate_series('2000-01-01 00:00'::timestamp,
                                  '2000-01-01 23:59', '1 minutes')
    )
    select cast(to_char(generate_series,'hh24:mi:ss') as time) as debut_tranche
         , cast(lead(to_char(generate_series,'hh24:mi:ss'),60) over (order by generate_series) as time) as fin_tranche
      from tranche;

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Merci pour vos réponses.

    J'ai testé ta solution skuatamad et c'est exactement ça que je voulais. Merci beaucoup à vous tous. Par contre je dois l'utiliser afin de pouvoir sommer les valeurs.

    Pour te répondre JeanYvette, j'en ai besoin pour avoir plus précisément le maximum sur un intervalle.

  7. #7
    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,


    Vous pouvez générer la site des plage, et faire une jointure (eventuellement externe) avec vos données

    un exemple pas testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select dte as debut, dte + interval '1 hour' as fin, sum(LaValeur) as somme
    from generate_series (CAST('2019-06-29T00:00:00' AS TIMESTAMP), '2019-06-29T02:00:00', '1 second') AS Dt(dte)
    left join LaTable 
        ON LaTable.LaDate BETWEEN dte AND dte + interval '1 hour'
    GROUP BY dte

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Merci pour votre réponse aieeeuuuuu.

    J'ai testé la requête et c'est ce que je souhaitais.

    Merci beaucoup.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/03/2017, 17h21
  2. grouper par mois dans une listview
    Par superkiller dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 24/01/2010, 14h25
  3. [WPF] Grouper par propriété d'une sous-collection
    Par BruceWayne dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 14/06/2007, 16h37
  4. Créer une fenêtre avec la couleur par defaut d'une dialog
    Par NicolasJolet dans le forum Windows
    Réponses: 2
    Dernier message: 03/08/2006, 16h01
  5. grouper par une partie d'attribut
    Par vplf dans le forum Langage SQL
    Réponses: 19
    Dernier message: 21/01/2005, 16h31

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