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 :

Récupérer valeur de date précédente


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut Récupérer valeur de date précédente
    Bonjour,

    Je dois m'occuper de mettre à jour une table à partir des valeurs d'une deuxième. J'ai donc fait le script qui fonctionne (vous m'aviez aidé pour le faire http://www.developpez.net/forums/d11...mps-vides-0-a/) et malheureusement certains champs sont vides.
    Je dois donc les remplir en me servant de la date et en les remplissant avec les mêmes champs que la requête précédente sauf que je dois prendre une valeur de date proche de celle de la table 1.
    J'ai pensé faire un test avec la valeur du mois mais ça n'a rien donné de concluant. J'imagine qu'il existe une fonction pour cela mais je n'ai rien trouvé de tel.

    Structure de la table :

    Table 1 :

    champ1 champ2 date
    1 | 1 | 01/02/2010
    2 | 5 | 10/02/2010

    Table 2 :

    champ1 champ2 date
    1 | 1 | 01/02/2010
    2 | 5 | 07/02/2010
    Comment pourrais-je récupérer la valeur 07/02/2010 de la table 2 sachant que les 2 tables sont reliées par plusieurs champs ?
    Le mieux serait de récupérer la valeur précédente au niveau de la date.

    De plus, les 2 tables sont dans des schémas différents

    En espérant m'être fait comprendre,

    merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Après 3 lectures je n'ai toujorus rien compris de ce que vous voullez.

    ceci étant dit vu le poste précédant (ca aurai été cool de le linker) je pense qu'il faudrai que vous passiez un peu de temps sur les tuto sql de ce forum.

    A défaut revenez ici en précisant :
    quelle table voullez-vous updater ?
    sur quel critère de sélection ?
    Que veut dire "Le mieux serait de récupérer la valeur précédente au niveau de la date" ?


    De plus, les 2 tables sont dans des schémas différents
    Si vous préfixer le nom de vos table par le schéma il n'y aura aucun problème, exemple : mon_schema.ma_table

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut
    Je vais essayer d'être plus clair :

    j'ai une table 1 que je met à jour avec des informations de table 2.
    Certains champs de table 1 sont vides après la mise à jour car les critères de sélection prennent en compte la date, or la date concernée par la ligne vide n'existe pas dans la table 2.
    Par contre, j'ai des dates proches dans la table 2 (par exemple, 10/02/2010 dans la table 1 et 07/02/2010 dans la table 2).
    Ce qu'il faudrait, c'est substituer la valeur de la date de la table 1 par celle de la table 2 afin que les champs vides de la table 1 soient remplis.

    Et la valeur "remplacée" doit être la plus proche possible et si possible du même mois.

    Donc ce que j'aimerais, c'est trouver comment faire pour prendre comme date dans la condition de jointure pour la table 1 une date approximative (= celle de la table 2) pour que la jointure table1.date = table2.date soit correcte, afin que l'update concerne toutes les lignes.

    J'ai essayé d'être clair dans mes explications.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Quel est votre requête actuel en fait ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE <table1>
    SET <champAUpdateTable1> = (SELECT DISTINCT <champTable2>
                    FROM <table2>
                    WHERE <champATable1> = <champATable2>
                        AND <dateTable1> = <dateTable2>
                        AND <champBTable1> = <champBTable2>
                        AND <champCTable1> = <champCTable2>
    WHERE <champAUpdateTable1> IS NULL;

  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
    Citation Envoyé par feldi Voir le message
    Donc ce que j'aimerais, c'est trouver comment faire pour prendre comme date dans la condition de jointure pour la table 1 une date approximative (= celle de la table 2) pour que la jointure table1.date = table2.date soit correcte, afin que l'update concerne toutes les lignes.
    Il me semble assez dangereux de faire une jointure sur une date !! Que faites-vous lorsque deux dates sont identiques ?

    Pouvez-vous nous mettre votre début de requête, un exemple complet (parce qu'ici il n'y a nul part un champ vide) et le résultat attendu.

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut
    Citation Envoyé par lola06 Voir le message
    Il me semble assez dangereux de faire une jointure sur une date !! Que faites-vous lorsque deux dates sont identiques ?

    Pouvez-vous nous mettre votre début de requête, un exemple complet (parce qu'ici il n'y a nul part un champ vide) et le résultat attendu.
    Lorsque les dates sont identiques, je met à jour les colonnes de la table 1avec les données de la table 2.
    Le problème se pose quand la date de la table 1 ne se trouve pas dans la table 2.

    Pour le résultat, il devrait être sensiblement le même que si la date était la même (champs à récupérer dont des tarifs qui changent selon le mois en gros).

  8. #8
    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
    Citation Envoyé par feldi Voir le message
    Lorsque les dates sont identiques, je met à jour les colonnes de la table 1avec les données de la table 2.
    Le problème se pose quand la date de la table 1 ne se trouve pas dans la table 2.

    Pour le résultat, il devrait être sensiblement le même que si la date était la même (champs à récupérer dont des tarifs qui changent selon le mois en gros).
    Peut-être pourrais-tu formater tes dates sous la forme 'mm/yyyy' ?

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    D'après ce que je comprend, votre table1 est une image de la table2.
    Pourquoi leur primary key diverge ?

  10. #10
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par feldi Voir le message
    Donc ce que j'aimerais, c'est trouver comment faire pour prendre comme date dans la condition de jointure pour la table 1 une date approximative (= celle de la table 2) pour que la jointure table1.date = table2.date soit correcte, afin que l'update concerne toutes les lignes.

    J'ai essayé d'être clair dans mes explications.
    Vous pouvez faire la jointure sur les autres colonnes, et prendre la ligne qui minimise la différence de date. Il faudrait voir la requête initiale pour faire une proposition ... Ainsi que préciser le besoin sur l'association par dates, quand vous dites "la plus proche possible", est-ce que c'est dans l'absolu, ou seulement pour des dates antérieures ? Que faire si ce n'est pas le même mois ? Etc.

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

Discussions similaires

  1. récupérer valeur précédente
    Par dicyz dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 04/05/2012, 12h17
  2. Requête date max, date précédente et valeurs associées
    Par Nitromard dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 15/07/2011, 08h39
  3. Réponses: 1
    Dernier message: 24/04/2010, 18h36
  4. Récupérer le maximum d'une valeur par date
    Par Caro30 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/01/2007, 13h56
  5. Récupérer valeur précédente
    Par Hbenne dans le forum Access
    Réponses: 1
    Dernier message: 31/07/2006, 09h36

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