|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Membre du Club
![]() Inscription : mai 2005 Messages : 91 ![]() |
Bonjour,
J'utilise Designer 5.1.6. J'ai une table T1 avec les champs suivants (C1, C2, C3, C4, DateDeb, DateFin). La clé primaire est sur les colonnes C1, C2 et DateDeb. Une historisation a été mise en place et c'est pourquoi la clé porte aussi sur la date de début. Nous avons donc un "empilement" des données en fonction de la clé sur C1 et C2. J'ai besoin de récupérer la dernière image des champs => cad max(DateDeb) Ex : 1, 2, 3, 4, 05/08/08, 06/08/09 1, 2, 3, 8, 07/08/08, "empty" 2, 5, 6, 7, 02/02/08, 03/07/08 2, 5, 8, 9, 04/07/08, 06/07/08 3, 4, 1, 1, 01/01/08, "empty" Sur ces 5 enregistrements, je voudrais donner la possibilité de récupérer que la dernière image : 1, 2, 3, 8, 07/08/08, "empty" 2, 5, 8, 9, 04/07/08, 06/07/08 3, 4, 1, 1, 01/01/08, "empty" ou de récupérer l'ensemble des lignes pour avoir l'historique des modifications. - J'ai pensé aux tables dérivées mais je n'y ai appararemment pas accès avec ma version de BO. - J'ai pensé à créer un filtre prédéfini (condition) au niveau de la classe correspondante mais je n'arrive pas à construire la clause Where : car j'ai l'erreur suivante : Citation:
Mais je n'ai pas réussi à faire une autojointure correcte sur la DateDeb. J'ai l'impression que ce n'est pas compliqué mais je n'arrive pas à le mettre en place facilement. Est-ce que vous pourriez m'indiquer vers quelle solution je dois insister ? filtre ou alias ? Ou bien à quel endroit je dois/peux appliquer la condition max(DateDeb) ? Si je travaille avec les alias, il faudrait (je pense) que je rajoute la condition : Code :
SELECT max(DateDeb) FROM T1 WHERE C1.T1 = C1.T1alias AND C2.T1=C2.T1alias Merci d'avance pour votre aide ! Tux |
|
|
|
00
|
|
|
#2 |
![]() ![]() Consultant en Business Intelligence Inscription : juillet 2008 Messages : 954 ![]() |
vois plutot pour mettre un top dans la table, qui serait égal à 1 pour le dernier
il suffit ensuite de mettre un filtre sur top=1 un filtre sur le max( datdeb) est couteux, tu risques d'avoir des problèmes de perf |
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : mai 2005 Messages : 91 ![]() |
Merci pour ta réponse rapide !
Le problème c'est que je n'ai pas le droit de modifier les tables. Je n'ai pas la main dessus et ce n'est pas envisageable à l'heure actuelle de modifier la structure des tables. En cas de gros problèmes de performances, j'essaierais de faire passer une évolution dans ce sens mais pas pour le moment... :-( Le filtre tu le placerais où et comment ? car pour le moment je n'arrive pas à le mettre en place... j'ai l'erreur indiquée dans le premier post. |
|
|
00
|
|
|
#4 |
|
Membre émérite
![]() Inscription : septembre 2006 Messages : 815 ![]() |
Je pense qu'il te faut quelquechose dans ce genre au niveau de la clause WHERE de ton sql....j'ai généré cela en posant une condition égal sur ma date dans BO, puis calcul, puis maximum, pour chaque valeur de ma valeur de référence...ici par exemple c'est pour avoir uniquement le dernier profil en date d'un utilisateur !
WHERE utilisat_profil.DATE_AFFECTATION = ALL ( SELECT max( utilisat_profil.DATE_AFFECTATION ) FROM AOSFAC00.OSFQT709 utilisat_profil, AOSFAC00.OSFQT003 SubAlias__26, AOSFAC00.OSFQT710 utilisat_structure WHERE utilisat_structure.ID_UTILISATEUR=SubAlias__26.ID AND utilisat_structure.ID_ABONNE=SubAlias__26.ABONNE AND (utilisat_profil.ID_ABONNE=utilisat_structure.ID_ABONNE AND utilisat_profil.ID_STRUCTURE=utilisat_structure.ID_STRUCTURE AND utilisat_profil.ID_UTILISATEUR=utilisat_structure.ID_UTILISATEUR AND SubAlias__26.ID = utilisateur.ID GROUP BY SubAlias__26.ID )
__________________
~~ bastoonet ~~ "Team BAB - Spécialistes BO" |
|
|
00
|
|
|
#5 | ||
|
Membre actif
![]() Inscription : juillet 2008 Messages : 181 ![]() |
Bonjour,
As-tu la possibilité de créer des vues ou de demander à qqun de créer une vue sur la base de données? La vue serait: Code :
Ensuite dans les objets il faudra bien veiller à utiliser des objets de la vue pour forcer la jointure (ou sinon forcer la jointure |
||
|
|
00
|
|
|
#6 |
![]() ![]() Consultant en Business Intelligence Inscription : juillet 2008 Messages : 954 ![]() |
sinon dans ton filtre prédéfini tu mets :
T.Datedeb=(SELECT max(DateDeb) FROM schema.table a WHERE T.C1 = a.C1 AND T.C2=a.C2) avec T= le nom de la table dans Designer ( = nom alias ? ) schema.table = le nom physique normalement ça marche ( j'ai testé en xi et de mémoire je l'ai fait en 5/6 ), je crois que tu peux le mettre en autojointure si tu le veux en automatique |
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : mai 2005 Messages : 91 ![]() |
J'ai essayé chacun de vos conseils et c'est le dernier que j'ai réussi à mettre en place !
J'ai créé une autojointure sur ma table avec comme expression : Code :
T.Datedeb=(SELECT max(DateDeb) FROM schema.TABLE a WHERE T.C1 = a.C1 AND T.C2=a.C2) schema.table = le nom physique (le nom du schéma n'est pas indispensable) Merci à tous les 3 et en particulier à john malkovich ! Tux PS : si je n'avais pas réussi , j'aurais surement fini par faire une demande de création de vue sur la BD... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com