Brûler une cellule cérébrale ... il doit y avoir un moyen simple de le faire.Requête Oracle pour extraire des itinéraires distincts
J'ai hérité les tableaux suivants:
approval_path
approval_path_steps
applications
application_roles
requests
role_approvals
Un utilisateur requests
un application role
pour un application
, qui doit passer par un approval path
, dont les étapes sont définies dans approval_path_steps
. L'historique d'approbation pour chaque étape du chemin d'approbation est stocké dans role_approvals
. Ainsi:
approval_path:
-> (p)approval_path_id
|
-------------------------
|
approval_path_steps: |
(p)approval_path_id --|
--> (p)sequence_nbr |
| approver |
| |
| |
| applications: |
| -> (p)application_id |
| | approval_path_id --
| |
| -------------------------
| |
| application_roles: |
| -> (p)role_id |
| | application_id ---
| |
| -------------------------
| |
| requests: |
| -> (p)request_nbr |
| | role_id ---
| | requestor
| |
| -------------------------
| |
| role_approvals: |
| (p)request_nbr ---
---- (p)sequence_nbr (NOT ACTUALLY KEYED!!! ENTERED MANUALLY!!)
approver
status
où (p)
indique la clé primaire. Les champs non immédiatement pertinents ont été omis. (btw, ce n'était pas ma conception)
Le problème: Les étapes du chemin d'approbation ont changé avec le temps pour un chemin d'approbation donné; des étapes ont été ajoutées, supprimées ou modifiées d'un approbateur à l'autre. Par conséquent, le approval_path_steps
qui ont été effectivement prises pour une demande ne correspond pas à la approval_path_steps
qui sont actuellement définis pour approval_path
du rôle demandé.
Ce que je besoin: J'ai besoin d'interroger la table role_approvals
de telle sorte que je peux énumérer les chemins distincts qui ont été utilisés. Alors:
role_approvals
--------------
1000 role1 1 manager approved
1000 role1 2 hr_mgr approved
1000 role1 3 app_owner approved
1001 role1 1 manager approved
1001 role1 2 hr_mgr approved
1001 role1 3 app_owner approved
1002 role1 1 app_owner approved
1002 role1 2 manager approved
Les résultats que je veux:
id seq_nbr approver
-- ------- --------
1 1 manager
1 2 hr_mgr
1 3 app_owner
2 1 app_owner
2 2 manager
où 'id' peut être calculée d'une certaine façon d'identifier, peu importe comment, d'identifier que chemin d'approbation unique qui a été pris.
Des idées?
Merci d'avance! James
Cette requête a obscurci les lumières toute la matinée (pas de surprise). Je vais essayer de le laisser passer la nuit pour voir ce que je reçois, je reviendrai vers vous. Merci! –
Je n'ai pas été en mesure d'obtenir cette requête pour terminer avec succès ... la plupart j'ai pu le laisser fonctionner est de 14 heures, mais j'ai dû le tuer quand j'ai emballé mon ordinateur portable le matin.Marquer comme la bonne réponse en supposant que cela fonctionnerait avec un plus petit ensemble de données. Merci pour l'aide! –