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

Requêtes et SQL. Discussion :

Historisation des données [AC-2000]


Sujet :

Requêtes et SQL.

  1. #1
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut Historisation des données
    Bonjour,

    Dans une petite application qui gère des personnes, je gère leur grade. Pour ce faire, j'ai donc une table des agents tAGE avec ageid comme identifiant, une table des grades tGRA toujours avec graid comme identifiant et une table intermédiaire qui historise les données de grade tHGR (cf. image jointe).

    Régulièrement, j'ai besoin du grade actuel de l'agent... et c'est là que je coince un peu. Pour y arriver, j'ai créé une case à cocher hgrcoc qui se met à jour lors de la création d'un nouveau grade de l'agent (je coche le nouveau grade et je décoche les autres). Cette solution fonctionne : lorsque j'ai besoin du grade actualisé de l'agent, je ne sélectionne que le grade coché.

    Intellectuellement, je me dis qu'il doit y avoir une meilleure méthode, car je ne suis jamais à l'abri d'un plantage quelconque des utilisateurs... et de plus, si je rentre un nouveau grade d'un agent en passant directement par les tables, il y a des risques...

    Comment ne pas utiliser le champ hgrcoc et dans mes requêtes récupérer le grade actualisé ? Avez-vous des conseils sur la méthode à utiliser ?
    Images attachées Images attachées  

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut Gabout

    Personnellement, je mettrais de champs date, en pour l'entrée en fonction dans le grade, et un pour la sortie du grade.

    Avantage :

    Recherche par la date la plus élevée en fonction.
    Historisation des différents grades par périodes, idéal pour ressortir un récapitulatif de carrière.

    Philippe

  3. #3
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour Philippe ,

    Si je te comprends bien : une date d'entrée dans le grade et une date de sortie... et pour la recherche du grade actualisé :
    • soit la date de sortie de grade vide
    • soit si c'est une date obligatoire quelque chose comme 31/12/2099.

    Ce qui signifie qu'il faudrait faire une vérification : pour tout nouveau grade, il faut que la date de sortie de l'ancien grade soit identique à la date d'entrée du nouveau grade.

    Peux-tu me confirmer ?

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 755
    Points : 57 604
    Points
    57 604
    Billets dans le blog
    42
    Par défaut
    bonjour,

    Citation Envoyé par Gabout Voir le message
    Ce qui signifie qu'il faudrait faire une vérification : pour tout nouveau grade, il faut que la date de sortie de l'ancien grade soit identique à la date d'entrée du nouveau grade.
    Si ces deux dates correspondent, il n'est sans doute pas utile de les stocker toutes les deux.

    En ne conservant que la date d'entrée dans le grade:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tHistoGrade(#AgentId, DateEntree, #GradeId)
    le grade en cours d'un agent étant celui correspondant à DateEntree le plus récent.

    bon Dimanche.

  5. #5
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour f-leb,

    Merci de ton aide,

    ... mais dans le cas où l'on conserve 2 dates, je solutionne facilement la date la plus récente : c'est celle dont la date de sortie est soit vide, soit avec une date "bidon" du genre 31/12/2099.

    La solution que tu me donnes est celle que j'avais choisie initialement, mais j'ai du mal à ne sélectionner que le grade correspondant à la date la plus récente... une idée ?

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 755
    Points : 57 604
    Points
    57 604
    Billets dans le blog
    42
    Par défaut
    pas de SQL le dimanche, donc je te la fais en image:



    la sous-requête SR retient la DateEntree la plus récente (avec Max) pour chaque Agent.

    La requête principale qui fait la jointure avec la sous-requête retournera le grade en cours pour chaque agent.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re

    En relisant la discussion, je pense que l'idée de f-leb est bien meilleur.

    Philippe

  8. #8
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Merci à tous les deux, cela fonctionne très bien. La solution de f-leb est en effet très efficace .

    Je vais donc marquer la discussion comme résolue, mais en continuant de rechercher la syntaxe pour imbriquer la requête (nommée RS par f-leb) dans mes requêtes principales afin d'améliorer le traitement et également éviter à tout utilisateur une erreur due à une modification.

    Encore merci !

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

Discussions similaires

  1. Datawarehouse - Historisation des données
    Par ginkas31 dans le forum Modélisation
    Réponses: 9
    Dernier message: 09/05/2014, 16h18
  2. Archives, historisation des données modifiées.
    Par jogrey dans le forum Hibernate
    Réponses: 5
    Dernier message: 27/07/2010, 09h44
  3. [XL-2007] Historiser des données
    Par gobi1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/07/2009, 21h51
  4. Historisation des Données
    Par mathieu44800 dans le forum Autres
    Réponses: 10
    Dernier message: 19/02/2008, 12h51
  5. Réponses: 8
    Dernier message: 18/02/2008, 13h10

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