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

Oracle Discussion :

analyse "périodes" basées sur des dates.


Sujet :

Oracle

  1. #1
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut analyse "périodes" basées sur des dates.
    Bonjour,
    je souhaiterais savoir si il existe déjà un moyen (si je peux éviter de réinventer la roue...) de "découper" une période de dates en tranches fixes (un mois par exemple) :

    je m'explique : si un client à l'attribut "pris en charge par la société" pour la période allant du 15.01.2004 au 12.12.2004, je dois vérifier que pour chaque "tranche" mensuelle (janvier, février, mars, etc...) qu'il existe bien une facture qui couvre l'ensemble de la tranche... donc pour janvier du 15 au 31, février du 1er au 28(29), ... , décembre du 1er au 12

    si quelqu'un à une idée...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    en fait ça ressemble à "il existe une facture dont to_char(date, 'MMYYYY') = to_char('MMYYYYY') de la date du client ? :

  3. #3
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    mouis... plus ou moins... je dois surtout trouver si une date où le client est pris en charge n'est pas facturée...

    mais mes prises en charges peuvent avoir des trous (du 01.01.2004 au 05.05.2004, puis du 09.07.2004 au 11.12.2004 par exemple) et mes factures doivent couvrir ces périodes...
    de plus une facture est susceptible de couvrir moins d'un mois (du 01.01.2004 au 17.01.2004) mais jamais plus d'un mois (01.01.2004 au 15.02.2004 => INTERDIT).

    en fait je sais le faire avec des loop imbriqués mais c'est passablement coûteux en terme de perf (les tables sont assez volumineuses et ça couvre quasiment l'ensemble des clients)... alors je me demandais si une alternative pouvait exister... avec peut-être une fonction analytique ou autre chose...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Est-ce que cela ne pourrait pas être fait avec des fonctions analytiques ?
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  5. #5
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    c'est justement la question que je me posais...

    mais comme c'est pas vraiment ma tasse de thé, je me demandais si quelqu'un pour qui les fonctions analytiques n'ont plus de secret pouvait me mettre sur la voie... quelle fonction utiliser et par quel bout attaquer... (oui oui, j'ai lu l'article de Lalystar...)
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  6. #6
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    bon, attaquons le problème par un autre bout...

    comment créer une liste de périodes à partir d'une durée ? par exemple si je donne la durée " du 12.01.2004 au 25.04.2004 " j'aimerais construire les périodes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    12.01.2004 - 31.01.2004
    01.02.2004 - 29.02.2004
    01.03.2004 - 31.03.2004
    01.04.2004 - 25.04.2004
    si quelqu'un a déjà un p'tit bout de code qui fait quelquechose comme ça c'est très volontier...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  7. #7
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    bon ok... je me suis construit une petite moulinette...

    pour info la voici
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Declare
        Cursor cTest is
        Select 
                to_date('12.01.2004','dd.mm.yyyy')      datefrom
                , to_date('25.04.2004','dd.mm.yyyy')    dateto
        from dual ; 
     
        dStart          Date := Null ;
        dEnd            Date := Null ;       
     
    Begin
     
         For i in cTest
            LOOP
                dStart := i.DateFrom ;
     
                If Not dStart >= trunc(i.DateTo,'MM')
                Then
                    dEnd := add_months(trunc(dStart,'MM'),1) -1 ;
                Else
                    dEnd := i.DateTo ;
                End if ;
     
                DBMS_OUTPUT.PUT_LINE ( dStart ||' - '|| dEnd );
     
                LOOP
                    Exit when dStart >= trunc(i.DateTo,'MM') ;
     
                    dStart := add_months(trunc(dStart,'MM'),1) ;
     
                    If Not dStart >= trunc(i.DateTo,'MM')
                    Then
                        dEnd := add_months(trunc(dStart,'MM'),1) -1 ;
                    Else
                        dEnd := i.DateTo ;
                    End if ;
     
                    DBMS_OUTPUT.PUT_LINE ( dStart ||' - '|| dEnd );
                End LOOP ;        
            End LOOP ;
    End ;
    si quelqu'un a une meilleure idée (fonction analytique par exemple), je suis toujours preneur...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    très bien

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/05/2011, 23h12
  2. Index sur des dates?
    Par nicovmd dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 30/06/2005, 14h20
  3. Réponses: 9
    Dernier message: 17/01/2004, 10h51

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