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 :

Taux d'occupation par tranche horaire


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 328
    Par défaut Taux d'occupation par tranche horaire
    Bonjour,

    Bonjour je souhaiterai transformer ma requête ORACLE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DATEJ, COUNT(DATEJ) AS DATE_ENTREE   FROM PRESENCE
    WHERE DATEJ BETWEEN '02/09/2009' AND '22/09/2009' 
    GROUP BY DATEJ
    en tranche horaire de 4 heures à l'aide du champ "HEURE"

    Car je vois pas trop comment utiliser les betweens...

    Merci d'avance

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Bonjour,

    Une description de la table et un extrait des données seraient bienvenus.
    Ce que vous souhaitez obtenir également, car votre explication est un peu sommaire.

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

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

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

    Pour générer les tranches de 4 heures, tu peux gruger.
    La clause hiérarchique CONNECT BY peut être utilisée abusivement pour générer des lignes à la volée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT to_date('02/09/2009', 'dd/mm/yyyy') + (level - 1) * 1/24 * 4 as borninf, to_date('02/09/2009', 'dd/mm/yyyy') + (level) * 1/24 * 4 as bornsub 
    FROM dual
    CONNECT BY level <= LeNombreDeTranchesHorairesDe4HeuresEntreTesDeuxDatesQueJaiLaFlemmeDexprimerMaisTuPeuxLeDeduireAPartirDeTestDeuxBornes
    Ca te crée des intervalles de 4 heures consécutifs.
    Maintenant, tu fais la jointure avec ta table : cela te permet d'associer toutes les lignes de ta table qui sont entre les deux dates à une tranche de 4 heures. Après quoi tu groupes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    WITH t AS (
    SELECT to_date('02/09/2009', 'dd/mm/yyyy') + (level - 1) * 1/24 * 4 as borninf, to_date('02/09/2009', 'dd/mm/yyyy') + (level) * 1/24 * 4 as bornsub 
    FROM dual
    CONNECT BY level <= LeNombreDeTranchesHorairesDe4HeuresEntreTesDeuxDatesQueJaiLaFlemmeDexprimerMaisTuPeuxLeDeduireAPartirDeTestDeuxBornes 
    )
    SELECT t.borninf, t.bornsup, count(*)
    FROM t 
      JOIN TaTable a ON a.TaDate BETWEEN t.borninf AND t.bornsup
    GROUP by t.borninf, t.bornsup
    Tu vois le principe ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 328
    Par défaut
    Bonjour,

    Ma requete affiche ça :

    Row# DATE
    1 02/09/2009 111
    2 03/07/2009 122
    3 03/08/2009 118
    .... etc...

    et je voudrais avoir :

    1 02/09/2009 | 0:00 | 3:59 | 70
    2 02/09/2009 | 4:00 | 7:59 | 30
    3 02/09/2009 | 8:00 | 11:59 | 11
    ...


    J'ai repris la réponse et j'ai modifié avec mes champs mais je bloque sur une partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JOIN PRESENCE a ON a.TaDate BETWEEN t.borninf AND t.bornsup
    code complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WITH t AS (
     SELECT TO_DATE('14/09/2009', 'dd/mm/yyyy') + (LEVEL - 1) * 1/24 * 4 AS borninf, TO_DATE('14/09/2009', 'dd/mm/yyyy') + (LEVEL) * 1/24 * 4 AS bornsub 
     FROM dual
     CONNECT BY LEVEL <= 42
     )
       SELECT t.borninf, t.bornsup, COUNT(*)
       FROM t 
       JOIN PRESENCE a ON a.TaDate BETWEEN t.borninf AND t.bornsup
       GROUP BY t.borninf, t.bornsup

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 328
    Par défaut
    J'ai avancé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WITH t AS (
     SELECT TO_DATE('14/09/2009', 'dd/mm/yyyy') + (LEVEL - 1) * 1/24 * 4 AS borninf, TO_DATE('14/09/2009', 'dd/mm/yyyy') + (LEVEL) * 1/24 * 4 AS bornsup 
     FROM dual
     CONNECT BY LEVEL <= 4
      )
      SELECT t.borninf, t.bornsup, COUNT(*)
      FROM t 
      JOIN PRESENCE a ON a.DATEJ BETWEEN t.borninf AND t.bornsup
      GROUP BY t.borninf, t.bornsup
    Résultat :

    Row# BORNINF BORNSUP COUNT(*)

    1 14/09/2009 14/09/2009 04:00:00 126


    ça commence mais je voudrais les tranches maintenant...

    merci de votre aide

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Ton problème vient sans doute du fait que tu as le jour et l'heure dans deux colonnes différentes.
    Utilise les deux pour en faire une date complète avant de la comparer aux bornes.

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

Discussions similaires

  1. requête par tranche horaire et par jour
    Par lieselotte dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/05/2009, 12h57
  2. Réponses: 1
    Dernier message: 26/03/2009, 19h43
  3. Calcul d'heures par tranche horaire
    Par A0080 dans le forum Excel
    Réponses: 11
    Dernier message: 05/03/2008, 14h19
  4. regroupement par tranche horaire
    Par Tiresia dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/06/2007, 10h50
  5. Récupérer des enregistrements par tranche horaire
    Par olive_le_malin dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 19/05/2006, 16h53

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