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

SQL Oracle Discussion :

Nombre d'enregistrements pour chaque heure de la journée


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Nombre d'enregistrements pour chaque heure de la journée
    Bonjour,
    Débutant, je cherche depuis un moment et ne parviens pas à résoudre mon problème. Ca ne doit pourtant pas être insurmontable....
    Pouvez-vous m'aider ?

    J'ai une table (image en attaché)

    Mon problème est de connaitre (avec une seule requête) le nombre d'enregistrements ayant eu lieu pour chaque plage d'une heure de la journée.

    Résultat du genre :
    Heure / Nb
    06:00 / 5
    07:00 / 3
    08:00 / 4
    ... etc
    06:00 étant l'heure de fin de plage (regroupant tous les enregistrements qui ont eu lieu entre 05:00:01 et 06:00:00)
    J'ai essayé groupby / trunc je n'y arrive pas

    Merci par avance pour votre aide

    Cordialement
    Images attachées Images attachées  

  2. #2
    Membre régulier Avatar de Doracle
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Points : 74
    Points
    74
    Par défaut
    Le plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT count(*)
    FROM matable
    WHERE date BETWEEN 'datedebut' AND 'datefin';

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci Doracle

    mais j'ai du mal m'exprimer :

    En effet, je peux y arriver comme cela en executant 24 requêtes (1 pour chaque heure de la journée )
    Mais je cherche a obtenir une nouvelle table (via un datareader ou autre) contenant tous mes resultats pour 1 journée en une seule requête.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      SELECT trunc(madate, 'hh24'), count(*)
        FROM matable
       WHERE madate BETWEEN 'datedebut' AND 'datefin'
    GROUP BY trunc(madate, 'hh24');
    Néanmoins les jours seront toujours distincts.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    ou essayez cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select to_char(madate,'hh24') as heure, count(*) as nbre from matable
    where to_char(madate,'dd-mm-yyyy')=date_jour
    group by to_char(madate,'hh24');

  6. #6
    Membre régulier Avatar de Doracle
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par Histy Voir le message
    Mais je cherche a obtenir une nouvelle table (via un datareader ou autre) contenant tous mes resultats pour 1 journée en une seule requête.
    Détaille un peu plus ce que tu veux, ou fais nous une simulation du résultat désiré. J'ai du mal a comprendre la finalité.

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai essayé les différentes suggestions mais le résultat n'est pas ce que j'attends.

    Je m'explique sur ce que je recherche :
    En entrée j'ai la table dont j'ai joint l'image.

    NUMERO - - DATE
    00001 / 2010-04-12 05:03:01
    00002 / 2010-04-12 05:31:02
    00003 / 2010-04-12 05:33:03
    00004 / 2010-04-12 05:34:04
    00005 / 2010-04-12 05:59:05
    00006 / 2010-04-12 06:03:01
    ../..

    En une seule requête sur cette table, filtrer les données d'une journée précise exemple 2010-04-12 puis obtenir les couples de données :

    HEURE - - COUNT
    05:00 / 5
    06:00 / 3
    07:00 / 4
    08:00 / 4
    09:00 / 5

    Explication : les NUMERO 0001 à 0005 ont eu lieu entre 05:00:00 et 05:59:59 le COUNT est donc = à 5

    Merci pour votre aide
    Images attachées Images attachées  

  8. #8
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select trunc(date, 'HH24') Heure , count(*) Quantite
    from Ta_table
    group by trunc(date, 'HH24')
    order by 1

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Avec la mise en page, en repartant de la requête de hdmea, sur un ptit exemple :
    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
    With MaTable as
    (
    select '00001' as nm, to_date('2010-04-12 05:03:01', 'yyyy-mm-dd hh24:mi:ss') as dt from dual union all
    select '00002',       to_date('2010-04-12 05:31:02', 'yyyy-mm-dd hh24:mi:ss')       from dual union all
    select '00003',       to_date('2010-04-12 05:33:03', 'yyyy-mm-dd hh24:mi:ss')       from dual union all
    select '00004',       to_date('2010-04-12 05:34:04', 'yyyy-mm-dd hh24:mi:ss')       from dual union all
    select '00005',       to_date('2010-04-12 05:59:05', 'yyyy-mm-dd hh24:mi:ss')       from dual union all
    select '00006',       to_date('2010-04-12 06:03:01', 'yyyy-mm-dd hh24:mi:ss')       from dual
    )
      select to_char(dt,'hh24') || ':00' as heure, count(*) as nbre
        from MaTable
       where trunc(dt) = date '2010-04-12'
    group by to_char(dt,'hh24')
    order by heure asc;
     
    HEURE	NBRE
    05:00	5
    06:00	1

  10. #10
    Invité
    Invité(e)
    Par défaut
    le to_char(dt,'hh24') est-il plus performant que le trunc(date, 'HH24') ?

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ça ne donne pas le même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select to_char(sysdate, 'hh24') as tc,
           trunc  (sysdate, 'hh24') as tr
      from dual;
     
    TC	TR
    10	14/04/2010 10:00:00
    Le to_char extrait, le trunc arrondi.

  12. #12
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci pour vos réponses.

    Waldar, c'est bien le résultat auquel je souhaitais parvenir. Cependant tu suggères n requêtes (n * Select '0001' , '0002' ....)
    le problème c'est que le nombre d'enregistrements de la table n'est pas fixe.

    Si c'est si compliqué en une seule requête je vais simplement faire 24 requêtes de 00:00 à 24:00 par tranche de 1h.

    Je pensais que ce serait plus simple. Encore merci pour votre participation

    Histy

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Non, la première partie de la requête c'est pour simuler un bout de votre table...

  14. #14
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Je suis vraiment #+^!*#

    La requête marche parfaitement .C'est exactement ce que je cherchais.

    Merci beaucoup !

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 11/02/2011, 17h38
  2. Nombre de resultat pour chaque heure.
    Par Niki59 dans le forum Langage
    Réponses: 4
    Dernier message: 22/09/2010, 15h28
  3. Réponses: 6
    Dernier message: 16/04/2007, 15h33
  4. afficher dans un etat le nombre de personnes pour chaque ville
    Par puppusse79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/12/2006, 15h55
  5. Réponses: 5
    Dernier message: 13/10/2006, 08h00

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