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 :

calcul par fonction analytique


Sujet :

SQL Oracle

  1. #21
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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
    22
    WITH t AS (
    		SELECT 130207 AS mat, TO_DATE('11/07/2005', 'DD/MM/YYYY') date_deb, TO_DATE('31/12/2005', 'DD/MM/YYYY') date_fin FROM dual
    	UNION ALL
    		SELECT 130207 AS mat, TO_DATE('01/01/2006', 'DD/MM/YYYY') date_deb, TO_DATE('31/03/2006', 'DD/MM/YYYY') date_fin FROM dual
    	UNION ALL
    		SELECT 130207 AS mat, TO_DATE('01/04/2006', 'DD/MM/YYYY') date_deb, TO_DATE('31/12/2006', 'DD/MM/YYYY') date_fin FROM dual
    	UNION ALL
    		SELECT 130207 AS mat, TO_DATE('01/02/2007', 'DD/MM/YYYY') date_deb, TO_DATE('31/03/2007', 'DD/MM/YYYY') date_fin FROM dual
    	UNION ALL
    		SELECT 130208 AS mat, TO_DATE('01/01/2007', 'DD/MM/YYYY') date_deb, TO_DATE('31/12/2007', 'DD/MM/YYYY') date_fin FROM dual
    		)
    SELECT mat, MIN(date_deb), MAX(date_fin)
    FROM (
    	SELECT mat, SUM(calc) OVER( PARTITION BY mat ORDER BY date_deb) AS sum_calc,
    		date_deb, date_fin
    	FROM (
    		SELECT mat, DECODE(date_deb, lag(date_fin + 1) OVER (PARTITION BY mat ORDER BY date_deb), 0, 1) AS calc,
    				date_deb, date_fin
    		FROM t
    		)
    	)
    GROUP BY mat, sum_calc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MATMIN(DATE_DEB)	MAX(DATE_FIN)
    130207	11/07/2005	31/12/2006
    130207	01/02/2007	31/03/2007
    130208	01/01/2007	31/12/2007

  2. #22
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    Ouah super ca fonctionne!!!!
    Je sais pas comment te remercier...
    ca me sauve la vie.
    En plus j'ai appris encore une nouvelle chose (connect by)

  3. #23
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    Encore un dernier petit souci...
    Quand je rajoute la date "date_temps_contrat" qui est la date de debut de temps partiel et bien il me redetaille tout...

    En faisant:
    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
     
     
    SELECT mat, MIN(date_deb), MAX(date_fin),CEM_LIB,CTR_LIB,SAL_NOSS, TAUX_TEMPS_PARTIEL,DATE_TEMPS_CONTRAT
    FROM (
    	SELECT mat, SUM(calc) OVER( PARTITION BY mat ORDER BY date_deb) AS sum_calc,
    		date_deb, date_fin,CEM_LIB,CTR_LIB,SAL_NOSS, TAUX_TEMPS_PARTIEL, DATE_TEMPS_CONTRAT
    	FROM (
    		SELECT H.SAL_MATR mat, DECODE(TO_DATE('30.12.1899', 'DD/MM/YYYY') + H.CON_DU + 2, lag(TO_DATE('30.12.1899', 'DD/MM/YYYY') + H.CON_AU + 2 + 1) OVER (PARTITION BY H.sal_matr ORDER BY TO_DATE('30.12.1899', 'DD/MM/YYYY') + H.CON_DU + 2), 0, 1) AS calc,
    				TO_DATE('30.12.1899', 'DD/MM/YYYY') + H.CON_DU + 2 date_deb, TO_DATE('30.12.1899', 'DD/MM/YYYY') + H.CON_AU + 2 date_fin,E.CEM_LIB,CTR_LIB,SAL_NOSS
    				,DECODE (E.CEM_ID,'P', HP.TEM_TAUX) as TAUX_TEMPS_PARTIEL
    				,DECODE (E.CEM_ID,'P', TO_CHAR(TO_DATE('30.12.1899', 'DD/MM/YYYY') + HP.TEM_DATE + 2),TO_CHAR(TO_DATE('30.12.1899', 'DD/MM/YYYY') + H.CON_DU + 2)) as DATE_TEMPS_CONTRAT
    		FROM SALARIE S LEFT JOIN H_CONTRAT H ON H.SAL_MATR=S.SAL_MATR
    		LEFT JOIN CCMX.H_TEMPART HP ON HP.SAL_MATR=S.SAL_MATR
    		LEFT JOIN AR_CONTRAT A ON A.CTR_ID=H.CTR_ID
    		LEFT JOIN AR_CEMPLOI E ON E.CEM_ID=S.CEM_ID
    		)
    	)
    GROUP BY mat, sum_calc,CEM_LIB,CTR_LIB,SAL_NOSS, TAUX_TEMPS_PARTIEL,DATE_TEMPS_CONTRAT
    MAT MIN(DATE_DEB) MAX(DATE_FIN) CEM_LIB CTR_LIB TAUX_TEMPS_PARTIEL DATE_TEMPS_CONTRAT
    130207 2006/01/01 00:00:00.000 2006/03/31 00:00:00.000 Complet Durée déterminée 01/01/06
    130207 2006/04/01 00:00:00.000 2006/12/31 00:00:00.000 Complet Durée déterminée 01/04/06
    130207 2005/07/11 00:00:00.000 2005/12/31 00:00:00.000 Complet Durée déterminée 11/07/05
    130207 2007/01/01 00:00:00.000 2007/03/31 00:00:00.000 Complet Durée déterminée 01/01/07


    J'aurais oublié qqchose?

  4. #24
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Ben c'est normal, vu que tu groupes dessus.
    Ca correspond à quoi ?

  5. #25
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    C'est bon j'ai regle le pb
    je vais faire 2 requetes pour recuperer toutes mes infos.
    Merci de votre collaboration!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/08/2009, 09h53
  2. [XL-2003] Calcul par itération et fonction valeur cible
    Par allergique dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/04/2009, 10h26
  3. Calcul d'une fonction analytique inverse
    Par matxl dans le forum Mathématiques
    Réponses: 3
    Dernier message: 31/05/2008, 14h15
  4. Réponses: 7
    Dernier message: 21/08/2007, 10h53
  5. Réponses: 4
    Dernier message: 28/09/2005, 09h19

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