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 :

Opération arithmétique et nombre d'itérations


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut Opération arithmétique et nombre d'itérations
    Bonjour à tous,

    j'ai un problème qui me taraude l’esprit depuis plus de 10 jours, je demande HELP !

    j'ai un nombre X et à partir de ce nombre je veux atteindre le "0" on passant par un nombre d’itération donné.

    exemple :
    X= 5000
    Nbr_itération = 6

    donc je dois avoir :
    It_01 = 5000
    It_02 = 4000
    It_03 = 3000
    It_04 = 2000
    It_05 = 1000
    It_06 = 0

    ( -1000 pour chaque itération)

    --------------------------------

    si Nbr_itération = 2
    donc
    It_01 = 5000
    It_02 = 0

    ( -5000 pour chaque itération)
    --------------------------------

    si Nbr_itération = 3
    donc
    It_01 = 5000
    It_02 = 2500
    It_03 = 0

    ( -2500 pour chaque itération )


    comme puis-je généraliser ça pour les grands nombres réels ? (ex : 5 025 145,00)

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut
    Ma question est elle assez difficile ?

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    On ne sait pas d’où vienne vos données ni comment est structurée la table. Donc impossible de vous répondre..

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut
    merci pour votre retour, je vais détaillé

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut
    les champs sont renseigné comme suit :


    GOLBAL_PRICE : saisi a la main initialement à 5000
    REV PRICE = GOLBAL_PRICE x nbr de jour du mois * taux (saisi à la main)
    DEP_PRICE = V_PRICE - REV PRICE
    REM_PRICE = REV PRICE - GOLBAL_PRICE

    on cherche à trouver "V_PRICE" pour laquelle "REM_PRICE=0" pour la dernière itération

    V_PRICE : Est saisi au départ arbitrairement (n'importe quelle valeur) soit 3500
    exemple :

    Nbr d’itération : (saisi à la main)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Value Date_|__Days___GOLBAL_PRICE___V_PRICE____REV_PRICE_____DEP_PRICE_______REM_PRICE___
    01/01/2018_____31______5 000,000__|__ 858,503__|__ 44,132___|__ 814,371____|____ 4 185,629 
    01/02/2018_____28_____ 4 185,629__|__ 858,503__|__ 33,369___|__ 825,134____|____ 3 360,495 
    01/03/2018_____31_____ 3 360,495__|__ 858,503__|__ 29,661___|__ 828,842____|____ 2 531,654 
    01/04/2018_____30_____ 2 531,654__|__ 858,503__|__ 21,625___|__ 836,878____|____ 1 694,776 
    01/05/2018_____31_____ 1 694,776__|__ 858,503__|__ 14,959___|__ 843,544____|____ 851,232 
    01/06/2018_____30_____ 851,232____|__ 858,503__|__ 7,271____|__ 851,232____|____-0,000

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Pas sur d'avoir tout compris, mais sur le principe, vous pouvez vous appuyer sur une table contenant des nombres de 0 à n (avec n > nombre max d'iterations possibles).

    Vous pouvez ensuite faire une jointure croisée en filtrant selon me nombre d'iterations saisi.

    quelque chose dans ce genre (pas testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT 
    	   ColonneNombre AS iteration
        ,   global_price - (ColonneNombre * (global_price / NbIterations))
    FROM LaTable
    CROSS JOIN TableNombres
    WHERE ColonneNombre <= NbIterations

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Si global_price est le montant initial, la somme à enlever à chaque fois est global_price / (nb_iterations -1)

    Je me souviens avoir vu passer il y a 6 ou 8 mois un message qui expliquait comment renvoyer tous les entiers entre 0 et un nombre n fixé, mais je n'ai pas le courage de le rechercher.
    En combinant ces 2 trucs, on devrait y arriver.

    Sinon, tu crées une fois pour toutes une table tab_entiers, avec tous les entiers entre 0 et 1000 par exemple. Et dans ce cas, la requête est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select  n, global_price - n * global_price / (nb_iterations -1) as montant_restant
    from tab_entiers
    where  n < nb_iterations ;
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Salut,
    J'ai essayé un petit peu, histoire de jouer, et je pense que pour le coup des itérations, un CONNECT BY devrait aider.
    Voici un exemple très basique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT a.*
         , ADD_MONTHS (TRUNC (SYSDATE, 'month'), a.iteration) value_date
         , TO_NUMBER (TO_CHAR (LAST_DAY (ADD_MONTHS (TRUNC (SYSDATE, 'month'), a.iteration)), 'dd')) nb_days
         , 5000 global_price
         , 2 taux
      FROM (    SELECT LEVEL - 1 iteration
                  FROM DUAL
            CONNECT BY LEVEL <= 36 /* valeur pour l'itération, choisie arbitrairement */
    ) a
    Pour le reste, je m'abstiens.
    Selon moi, il manque des infos / explications afin de pouvoir comprendre vraiment le truc. Dans un des exemples donnés par LandGreen le 16 08, "value date" est une date qui semble augmenter a chaque itération, mais on ne sait pas comment est selectionnée la date de départ. Il est dit "REV PRICE = GOLBAL_PRICE x nbr de jour du mois * taux (saisi à la main)", mais je ne comprends pas du tout alors comment on peut trouver au mois 2 des valeurs telles que GOLBAL_PRICE = 4 185,629, Days = 28, REV PRICE = 33,369 ... quelle étrange calcul se cache derrière?
    Etc ... je lache l'affaire ici.

    En me référant au message de LandGreen le 13 08, alors je ferais qqchose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT b.*, b.global_price - base_retrait test1
      FROM (SELECT a.*
                 , 5000 global_price
                 , MAX (iteration) OVER () max_iter
                 , (5000 / (MAX (iteration) OVER () - 1)) * (iteration - 1) base_retrait
              FROM (    SELECT LEVEL iteration
                          FROM DUAL
                    CONNECT BY LEVEL <= 6) a) b
    @+
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut
    value date" est une date qui semble augmenter a chaque itération, mais on ne sait pas comment est selectionnée la date de départ.
    Bonjour et merci à tous pour vos retours,

    Value date est selectionnée à partir du date de départ et de nombre d'itération

    si je mets date de départ à '05-01-2018' et nbr_itération à 5

    alors on aura 5 ligne comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ligne1 ------------------------------- 05-01-2018---------31 (nbr de jour dans ce mois)
    ligne2 ---- (prochain mois)----------- 05-02-2018---------28 (nbr de jour dans ce mois)
    ligne3 ---- (prochain mois)----------- 05-03-2018---------30 (nbr de jour dans ce mois)
    ligne4 ---- (prochain mois)----------- 05-04-2018---------31 (nbr de jour dans ce mois)
    ligne5 ---- (prochain mois)----------- 05-05-2018---------30 (nbr de jour dans ce mois)

  10. #10
    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
    A un moment tu dis "on cherche à trouver "V_PRICE" pour laquelle "REM_PRICE=0" pour la dernière itération ".

    Est-ce que c'est ça le résultat attendu ou alors ce sont les infos de toutes les lignes ?
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par McM Voir le message
    A un moment tu dis "on cherche à trouver "V_PRICE" pour laquelle "REM_PRICE=0" pour la dernière itération ".

    Est-ce que c'est ça le résultat attendu ou alors ce sont les infos de toutes les lignes ?

    Oui Ouii, ici j'ai répondu à la question de Sunchaser donc j'ai cité seulement les deux colonnes qui sont l'objet de la question.

    donc V_PRICE est le même pour toutes les lignes

    j'ai une simulation avec excel sur ce lien qui va plus détaillée :

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Si global_price est le montant initial, la somme à enlever à chaque fois est global_price / (nb_iterations -1)
    merci pour votre réponse, mais quand on applique ce que vous avez dit on obtient pas les résultats souhaités

  13. #13
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT b.*, b.global_price - base_retrait test1
      FROM (SELECT a.*
                 , 5000 global_price
                 , MAX (iteration) OVER () max_iter
                 , (5000 / (MAX (iteration) OVER () - 1)) * (iteration - 1) base_retrait
              FROM (    SELECT LEVEL iteration
                          FROM DUAL
                    CONNECT BY LEVEL <= 6) a) b

    [/QUOTE]

    ça fonctionne à merveille, mais ici vous avez pas respecté les conditions citées plus haut,

    par exemple :

    global_price il sera saisi qu’une seule fois et il est variable, il diminue à chaque itération.

    @++

  14. #14
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,

    Citation Envoyé par LandGreen Voir le message
    Bonjour et merci à tous pour vos retours,

    Value date est selectionnée à partir du date de départ et de nombre d'itération

    si je mets date de départ à '05-01-2018' et nbr_itération à 5

    alors on aura 5 ligne comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ligne1 ------------------------------- 05-01-2018---------31 (nbr de jour dans ce mois)
    ligne2 ---- (prochain mois)----------- 05-02-2018---------28 (nbr de jour dans ce mois)
    ligne3 ---- (prochain mois)----------- 05-03-2018---------30 (nbr de jour dans ce mois)
    ligne4 ---- (prochain mois)----------- 05-04-2018---------31 (nbr de jour dans ce mois)
    ligne5 ---- (prochain mois)----------- 05-05-2018---------30 (nbr de jour dans ce mois)
    C'est ce que fait mon deuxième exemple, je partais sur le fait que la date de départ était entrée arbitrairement, ainsi que le nombre d'itération (voir le commentaire que j'avais mis au niveau du "connect by level").

    Pour le reste, je te renvoie vers mon message, ci-dessous un extrait:
    Citation Envoyé par Sunchaser Voir le message
    Il est dit "REV PRICE = GOLBAL_PRICE x nbr de jour du mois * taux (saisi à la main)", mais je ne comprends pas du tout alors comment on peut trouver au mois 2 des valeurs telles que GOLBAL_PRICE = 4 185,629, Days = 28, REV PRICE = 33,369 ... quelle étrange calcul se cache derrière?
    En plus, tu ajoutes:
    Citation Envoyé par LandGreen
    global_price il sera saisi qu’une seule fois et il est variable, il diminue à chaque itération.
    Ok, mais quelle règle appliquer a global_price afin qu'il varie? Ton message du 16/08/2018, 11h26 ne le détaille pas.

    Je ne pense pas que le problème soit technique, mais plutôt dans la compréhension / la définition de ce qui doit être fait.
    En tout cas, pour moi, c'est pas très clair. Désolé.

    @+
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

Discussions similaires

  1. Nombre d'opérations arithmètiques
    Par assem.thabet dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/11/2010, 15h17
  2. Opération arithmétique dans un select
    Par Christophe Charron dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/03/2007, 11h19
  3. Réponses: 5
    Dernier message: 17/06/2006, 12h33
  4. Opération arithmétique de String à Float
    Par Shiryu57 dans le forum Langage
    Réponses: 4
    Dernier message: 13/03/2006, 10h22
  5. [VAL] Opérations arithmétiques
    Par WriteLN dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/05/2005, 09h59

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