Comment écrire une requête pour obtenir le dernier enregistrement de l'employé compte tenu de la date d'entrée en vigueur dans oracle?
J'ai un employé et employee_history table. Pour chaque mise à jour sur la table des employés, j'ai insérer un enregistrement dans la employee_history table.
À la fois les tables ont une colonne appelée comme date d'entrée en vigueur qui indique que le statut de salarié à cette date d'entrée en vigueur.
Ci-dessous sont mes deux tables.
J'ai besoin d'obtenir l'enregistrement de l'employé plus tard à cette date.
e.g Si j'ai besoin d'obtenir de l'employé, tel que le 16 mai, je devrais recevoir le emp_hist_id = 2 record de l'histoire de la table. Comme le 5 juin, je devrais recevoir le emp_hist_id = 4 de hist de la table.
Et que le 15 août, je devrais recevoir le dossier de l'employé de la table elle-même.
S'il vous plaît aider.
- Pourquoi ne pas stocker le courant enregistrement de l'employé dans employee_history trop? Ensuite, vous n'aurez besoin que de requête employee_history à obtenir des données pour n'importe quelle date.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer quelque chose comme
L'idée est de prendre les dossiers liés à d'utilisateur de votre choix à partir des deux tables, puis prendre dates inférieure à celle désirée et enfin attraper le premier
[
]
avec"
"
(en supposant que le nom de la colonne est"effective date"
et paseffective_date
Vous pouvez résoudre ce problème sans fonctions analytiques. La sous-requête ici calcule la plus récente date dans l'histoire de l'enregistrement avant de l'employé à la date d'entrée en vigueur:
Cette solution suppose qu'il n'y a pas dupliquer les dates d'entrée en vigueur de l'histoire de la table. Si il ya, alors vous avez une autre option. En supposant que le employee_history_ids sont attribués séquentiellement, prendre le max de cette id au lieu de la date.
Il existe d'autres formulations de la solution à l'aide d'Oracle fonctions analytiques.
Essayez ce qui suit :
vous pouvez voir un exemple ici