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 :

Retrancher un nombre de jours ouvrables à une date


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    Par défaut Retrancher un nombre de jours ouvrables à une date
    Bonjour,

    Y a-t-il un moyen de retrancher un nombre de jours OUVRABLES à une date ?
    J'ai une date de fin dans la table a et un nombre de jours ouvrables dans la table b
    Evidemment, cette instruction ne donne pas le résultat souhaité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select a.activity_seq, a.part_no, a.offset, b.early_finish - a.offset from matable1 a, matable2 b where ...
    Merci d'avance

    Franck

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Sauf à accepter une approximation grossière, genre 5 jours ouvrés par semaine, il faut un calendrier des jours ouvrés, calendrier qui peut éventuellement dépendre de l'établissement concerné

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    Par défaut
    J'ai, pour le moment, trouvé une table reprenant les jours fériés et une autre qui dit qu'on travaille du lundi au vendredi (mais pas de table calendrier !)
    Je me contente, pour le moment, de faire une règle de 3 sur le champ offset mais je n'obtiens pas le résultat souhaité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select a.activity_seq, a.part_no, a.offset, b.early_finish - (a.offset *7 / 5) from matable1 a, matable2 b where ...

  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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    Par défaut
    J'ai trouvé une table reprenant tous les jours ouvrés (work_time_counter). Mais je dois avouer coincer sur la méthode
    J'ai la date de fin d'activité
    J'ai le nombre de jours ouvrés à retrancher à cette date
    J'ai la table work_time_counter (1 record par journée travaillée)

  6. #6
    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
    Ce sera nettement plus facile de vous aider avec un jeu de test, ce que vous attendez en sortie et selon quelles règles ; pour le moment vous nous donnez la moitié des règles.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    Par défaut
    Constituer un jeu de tests mais sous quel format ?

    table activité contient activity_seq et early_finish (date de fin de l'activité)
    table demande projet contient activity_seq et offset (un nombre de jours ouvrés à retrancher à cette date de fin d'activité pour retrouver LA DATE de demande)
    table calendrier contient counter (un compteur incrémenté par pas de 1) et work_day (date)

    Est-ce que c'est un peu plus clair ?

  8. #8
    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
    En SQL c'est pas mal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    create table activite...
    insert into activite...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    Par défaut
    Il faudrait lire une première fois la table calendrier avec early_finish = work_day
    puis lire de nouveau la table calendrier avec counter = counter - offset

    mais je ne suis pas un spécialiste du SQL

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    Par défaut
    Je précise que j'attaque la DB d'un ERP sur lequel j'ai peu de droits. Je peux juste exécuter des requêtes SELECT

  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
    Vous prenez le problème à l'envers.
    Je ne vous demande pas d'expliquer comment trouver la solution - si vous le saviez vous ne seriez pas ici.
    Je vous demande un jeu de données claires, qu'est-ce que vous voulez comme résultat à partir de ces données et selon quelles règles de gestion fonctionnelle ; j'insiste, le QUOI, pas le COMMENT.

    Par exemple un jeu de données complètement pris au hasard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create table activite (activity_seq integer, early_finish date);
    insert into activite values (1, date '2018-02-20');
    insert into activite values (2, date '2018-02-23');
     
    create table demande_projet (activity_seq integer, offset integer);
    insert into demande_projet values (1, 2);
    insert into demande_projet values (2, 2);
     
    create table calendrier (counter integer, work_day date);
    insert into calendrier values (1, date '2018-02-21');

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    Par défaut
    Tout ce que je peux faire, c'est extraire un jeu de données dans un XLS
    Est-ce que ça vous convient ?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    Par défaut
    J'espère que ce jeu de tests sera suffisamment explicite

    Merci par avance, en tout cas !
    Fichiers attachés Fichiers attachés

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    Par défaut
    En persévérant, j'ai fini par trouver
    Merci à tous pour votre aide

    Pour ceux que ça intéresse, voici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select a.part_no, a.require_qty "Qté Demande", a.qty_assigned "Qté Résa", a.qty_issued "Qté Sortie", a.offset, b.early_finish "Date Fin", a.cf$_boc_cf_prjpck7_a7_avqt "Stock Dispo", c.counter "Compteur Fin",
    (select to_char(d.work_day, 'DD/MM/YYYY') from IFSAPP.work_time_counter d
    where d.calendar_id='BE_JF' and d.counter = (c.counter - a.offset) ) as Required_Date 
    from IFSAPP.project_misc_procurement_cfv a, IFSAPP.activity b, IFSAPP.work_time_counter c
    where a.activity_seq = b.activity_seq 
    and c.calendar_id='BE_JF'
    and to_char(b.early_finish, 'DD/MM/YYYY') = to_char(c.work_day, 'DD/MM/YYYY')
    and a.project_id='PJ17001119' and a.activity_seq = 100034602 
    and std_planned_item ='1'
    and a.require_qty > coalesce(a.qty_assigned,0)
    and a.require_qty > coalesce(a.qty_issued,0)

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

Discussions similaires

  1. [XL-2007] Ajouter des jours ouvrables à une date
    Par louqui dans le forum Excel
    Réponses: 12
    Dernier message: 08/03/2012, 14h42
  2. soustraire un nombre de jours d'une date
    Par air75 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/02/2009, 23h16
  3. ajouter nombre de jours a une date
    Par debutantasp dans le forum ASP
    Réponses: 7
    Dernier message: 31/03/2008, 09h02
  4. Réponses: 3
    Dernier message: 04/06/2007, 14h11
  5. ajouter un nombre de jour ouvrable à une date
    Par ecirb dans le forum InfoPath
    Réponses: 1
    Dernier message: 30/03/2007, 15h52

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