Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Business Objects > Designer
Designer Forum d'entraide Designer (création d'univers, etc.)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2011, 18h48   #1
Invité de passage
 
Inscription : juin 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 3
Points : 0
Points : 0
Par défaut Comment récupérer la version la plus récente?

Bonjour a tous,

Je suis actuellement sur un projet BI, et je bloque sur un problème qui parait simple mais vraiment la je n'y arrive pas...

Je vais essayer de faire simple:
J'ai une table RESERVATION dans laquelle j'ai un identifiant TRANS_ID, un RES_ID, une DATE_OUVERTURE et un STATUT de réservation.

Le TRANS_ID correspond à ma clé primaire il permet de différencier une réservation à 2 instants différents, la date d'ouverture est la date de la version de la reservation.
Exemple :

TRANS_ID | RES_ID | DATE_OUVERTURE | STATUT
1 | 1 | 01/01/2011 | BK
2 | 1 | 02/01/2011 | CL
3 | 1 | 03/01/2011 | CT
4 | 2 | 02/01/2011 | BK
5 | 2 | 04/01/2011 | CL


Mon problème est le suivant, je voudrai que quand des utilisateurs font une requete sous Webi en prenant une plage de date ex : entre 15/12/2010 et 02/01/2011 les réservations résultantes soit automatiquement et seulement :
2 | 1 | 02/01/2011 | CL
4 | 2 | 02/01/2011 | BK

soit la version la plus récente d'une réservation sur la plage de temps donnée.


J'ai tenté de passer par une table dérivé avec la requête :
Code :
1
2
3
4
5
6
7
8
9
10
SELECT T1.RES_ID, T1.DATE_OUVERTURE, T1.TRANS_ID , T1.STATUT
FROM RESERVATION T1
 
INNER JOIN 
 
(SELECT T2.RES_ID, MAX(T2.DATE_OUVERTURE) AS DATE_MAX 
FROM RESERVATION T2 
GROUP BY T2.RES_ID) T3
 
ON (T1.RES_ID=T3.RES_ID) AND (T1.DATE_OUVERTURE=T3.DATE_MAX)


Mais lorsque la plage de temps ne comprend pas la DATE_OUVERTURE maximum, je n'obtiens aucun résultat.

J'ai aussi tenté un @Prompt ou un @Variable mais rien de satisfaisant (peut-être que je m'y suis mal pris)

J'avoue être à court d'idée, c'est pourquoi je demande un peu de votre aide.
Merci d'avance pour ceux qui essaieront.

Je sais que je n'ai pas été actif depuis mon inscription mais je compte corriger ca, désolé...
tibaldo13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 08h43   #2
Modérateur
 
Avatar de Julien59
 
Julien Lizzul
Inscription : mars 2008
Messages : 1 103
Détails du profil
Informations personnelles :
Nom : Julien Lizzul
Âge : 25
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2008
Messages : 1 103
Points : 1 295
Points : 1 295
Bonjour,

Pour t'aider, je vais avoir besoin de ton SGBD.
En espérant que tu ne sois pas sous Access
__________________
  • Pensez à consulter la FAQ BO
  • Quand votre problème est solutionné, n'oubliez pas de cliquer sur le bouton
Julien59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 12h57   #3
Invité de passage
 
Inscription : juin 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 3
Points : 0
Points : 0
Oracle 10g
J'aurai du le préciser avant en effet.

Merci de t'interesser à mon problème.
tibaldo13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 14h03   #4
Modérateur
 
Avatar de Julien59
 
Julien Lizzul
Inscription : mars 2008
Messages : 1 103
Détails du profil
Informations personnelles :
Nom : Julien Lizzul
Âge : 25
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2008
Messages : 1 103
Points : 1 295
Points : 1 295
Je vais pouvoir t'aider alors
Tu vas pouvoir t'en sortir en utilisant la fonction Rank().
Ton idée était la bonne, mais je pense que tu n'arrivais tout simplement pas à la mettre en place.
Pour résoudre le problème :
Tu crées une table dérivée qui te ramène les lignes filtrées avec la fourchette de date souhaitée par l'utilisateur (@prompt()). Ensuite, on va faire un classement par id de réservation en fonction de la date. Ce qui donne la table dérivée suivante (je l'appelle TD_RESA) :
Code :
1
2
3
4
5
6
7
SELECT 
RES_ID,
RANK() OVER (PARTITION BY RES_ID ORDER BY DATE_OUVERTURE DESC) AS  "CLASSEMENT_DATE" ,
FROM
RESERVATION
WHERE
DATE_OUVERTURE BETWEEN @prompt('date de début','D',,mono,free,) AND @prompt('date de fin','D',,mono,free,)
Une fois que tu as cette table, il te suffit de la lier à ta table RESERVATION par :
Code :
1
2
TD_RESA.RES_ID = RESERVATION.RES_ID 
AND TD_RESA.CLASSEMENT_DATE=1
Normalement, ca devrait résoudre ton problème.

Petite remarque : Si tu as 2 réservations sur la même date :
Code :
1
2
3
TRANS_ID | RES_ID | DATE_OUVERTURE | STATUT
1 | 1 | 01/01/2011 | BK
2 | 1 | 01/01/2011 | CL
Que dois tu ramener ?
__________________
  • Pensez à consulter la FAQ BO
  • Quand votre problème est solutionné, n'oubliez pas de cliquer sur le bouton
Julien59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 09h38   #5
Invité de passage
 
Inscription : juin 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 3
Points : 0
Points : 0
Normalement ce cas (2 dates identiques) est impossible mais bon...
Vraiment merci pour ton aide, je testerai ta solution Lundi quand je retourne sur ce projet.
Si tu as besoin de quoi que ce soit n'hésite pas
tibaldo13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 10h15   #6
Modérateur
 
Avatar de Julien59
 
Julien Lizzul
Inscription : mars 2008
Messages : 1 103
Détails du profil
Informations personnelles :
Nom : Julien Lizzul
Âge : 25
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2008
Messages : 1 103
Points : 1 295
Points : 1 295
Si c'est impossible, alors pas de problème, ca fonctionnera.
Par contre, si c'est possible, demande ce qu'il faut retourner, et même si c'est impossible, demande "Et si qqun fait une erreur de saisie ?".
Combien de fois m'a t-on dit : ce cas est impossible, et je me retrouve avec sur les bras.
En gros, si on prend les 2, alors le rank() est ok, si tu dois n'en prendre qu'un, il faudra utiliser dense rank()
Bon courage
__________________
  • Pensez à consulter la FAQ BO
  • Quand votre problème est solutionné, n'oubliez pas de cliquer sur le bouton
Julien59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h18.


 
 
 
 
Partenaires

Hébergement Web