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 :

[10g] Groupement d'enregistrements


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut [10g] Groupement d'enregistrements
    Bonjour,

    j'ai une requête qui parcours une période de date / heure qui correspondent à des séances de cours.

    En fonction que la séance est le matin ou l'après midi je marque la ligne à 0.5 pour dire séance du matin ou de l'apres midi.

    cela donne cela :

    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
     
    M     A p     Id             Date
    	0,5	30352	13/02/12
    	0,5	30352	13/02/12
    	0,5	30352	13/02/12
    0,5		30352	13/02/12
    0,5		30352	13/02/12
    	0,5	30352	14/02/12
    	0,5	30352	14/02/12
    0,5		30352	14/02/12
    	0,5	30352	15/02/12
    	0,5	30352	15/02/12
    0,5		30352	15/02/12
    0,5		30352	16/02/12
    	0,5	30352	16/02/12
    	0,5	30352	16/02/12
    0,5		30352	17/02/12
    j'ai autant de ligne que de séance par jour.

    J'aimerai avoir quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    M     A p     Id             Date
    0.5	0,5	30352	13/02/12
    0.5	0,5	30352	14/02/12
    ....
    0,5	0	30352	17/02/12
    Soit un regroupement par jour.

    voici ma requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                 select CASE
                         WHEN ( substr(ser2.block_id,0,2)>=7  and substr(ser2.block_id,7,2)<=13 ) THEN 0.5
                        END As block_matin,
                        CASE
                          WHEN ( substr(ser2.block_id,0,2)>=13  and substr(ser2.block_id,7,2)<=22 ) THEN 0.5
                        END As block_apmidi,
                        sla2.student_fk,
                        ser2.date_from
                 from aemstudabslat sla2
                 INNER JOIN aemservtimeblk ser2 ON (ser2.servtimeblk_pk = sla2.servtimeblk_fk)
                 INNER JOIN aemserviceoff aem2  ON (ser2.serviceoff_fk = aem2.serviceoff_pk AND ser2.client = aem2.client)
                 Where ser2.client='P1' and sla2.student_fk = '30352' 
                 AND aem2.service_id  not like '%MOD%'
    Auriez vous une idée ?
    Merci de votre aide.

  2. #2
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Cette requête résoudrait-elle ton problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Max(M), Max(A.p), Id, date
    FROM MaTable
    GROUP BY Id, date
    De plus est-ce normal que tu ais des doublons dans ta table ? Car vu ta description c'est pas très logique.

  3. #3
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Bonjour,

    c'est pas des doublons ma table contient des créneaux horaires / jours ... si le créneau est le matin je met 0.5 pour matin , si c'est l'apres midi je met 0.5 pour apres midi.

  4. #4
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Du coup il faudrait les données complètes parce qu'avec ton exemple on se retrouve avec 3 doublons pour le 13/02/2012.

    Ma requête ne marche pas ?

  5. #5
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Bonjour

    Pour faire simple ..

    Ma table contient des données un peu comme cela:
    08H00-09H00 30352 13/02/12
    09H00-10H00 30352 13/02/12
    01H00-12H00 30352 13/02/12
    13H00-14H00 30352 13/02/12
    15H00-20H00 30352 13/02/12

    Je cherche à savoir s'il s'agit d'un créneau matin ou ap midi.

    C'est le but de cette requête:
    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
     
                 select CASE
                         WHEN ( substr(ser2.block_id,0,2)>=7  and substr(ser2.block_id,7,2)<=13 ) THEN 0.5
                        END As block_matin,
                        CASE
                          WHEN ( substr(ser2.block_id,0,2)>=13  and substr(ser2.block_id,7,2)<=22 ) THEN 0.5
                        END As block_apmidi,
                        sla2.student_fk,
                        ser2.date_from
                 from aemstudabslat sla2
                 INNER JOIN aemservtimeblk ser2 ON (ser2.servtimeblk_pk = sla2.servtimeblk_fk)
                 INNER JOIN aemserviceoff aem2  ON (ser2.serviceoff_fk = aem2.serviceoff_pk AND ser2.client = aem2.client)
                 Where ser2.client='P1' and sla2.student_fk = '30352' 
                 AND aem2.service_id  not like '%MOD%'      
                 Order by  ser2.date_from
    j'obtient cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    M     A p     Id             Date
    	0,5	30352	13/02/12
    	0,5	30352	13/02/12
    0,5		30352	13/02/12
    0,5		30352	13/02/12
    0,5		30352	13/02/12
    je cherche à avoir une regroupement par date et avoir quelque chose comme :
    et dire le 12/02 j'ai au moin un créneau le matin et un l'ap midi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    M     A p     Id             Date
    0,5	0,5	30352	13/02/12
    Je cale un peu et tout aide serait la bienvenue

    Merci de votre aide

  6. #6
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Du coup cette requête devrait être bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Max(M), Max(A.p), Id, date
    FROM MaTable
    GROUP BY Id, date

  7. #7
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Qu'en est-il d'une plage horaire de ce style ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    11:00 14:00 666 21/12/2012
    Si tu pars du principe que c'est l'heure de début qui fait foi tu peux imaginer quelque chose dans le genre
    (PS : Ne connaissant pas les formats que tu utilises je te donne juste une technique pour déterminer s'il y a un cours au matin ou l'après-midi)

    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
    SELECT
      DECODE(SIGN(
        TO_DATE('12:00:00','HH24:MI:SS')
        -TO_DATE('14:00:00','HH24:MI:SS'))
      ,-1,NULL,0,5) AS Result
    FROM dual
     
    RESULT
    ----------------------------------------
     
     
    SELECT
      DECODE(SIGN(
        TO_DATE('12:00:00','HH24:MI:SS')
        -TO_DATE('11:00:00','HH24:MI:SS'))
      ,-1,NULL,0,5) AS Result
    FROM dual
     
    RESULT
    ----------------------------------------
    .5
    Ensuite tu groupes par salle et date

  8. #8
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Merci Scriuiw
    je viens d'essayer tes requêtes et cela ne me renvoi rien ...

  9. #9
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Merci lola06 pour l'idée ...

    j'ai fait cela :

    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
     
    Select max(block_matin),max(block_apmidi),date_from From 
                 (select CASE
                         WHEN ( substr(ser2.block_id,0,2)>=7  and substr(ser2.block_id,7,2)<=13 ) THEN 0.5
                        END As block_matin,
                        CASE
                          WHEN ( substr(ser2.block_id,0,2)>=13  and substr(ser2.block_id,7,2)<=22 ) THEN 0.5
                        END As block_apmidi,
                        sla2.student_fk,
                        ser2.date_from as date_from
                 from aemstudabslat sla2
                 INNER JOIN aemservtimeblk ser2 ON (ser2.servtimeblk_pk = sla2.servtimeblk_fk)
                 INNER JOIN aemserviceoff aem2  ON (ser2.serviceoff_fk = aem2.serviceoff_pk AND ser2.client = aem2.client)
                 Where ser2.client='P1' and sla2.student_fk = '30352' 
                 AND aem2.service_id  not like '%MOD%'  )    
                 Group by date_from
                 Order by date_from
    je sais pas si c'est vraiment optimisé mais cela fonctionne

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/10/2012, 19h47
  2. Réponses: 1
    Dernier message: 06/03/2009, 18h11
  3. Réponses: 7
    Dernier message: 17/03/2008, 16h40
  4. [Oracle 10g]Problème pour enregistrer blob
    Par Invité dans le forum Hibernate
    Réponses: 6
    Dernier message: 27/04/2005, 11h45

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