salut
J ai 3 champs (dateeffet) de type date dans 3 tables differentes , je veux selectionner le maximum entre ces trois champs et le nom de la table qui contient la plus grande valeur.
comment faire?
merci d'avance
salut
J ai 3 champs (dateeffet) de type date dans 3 tables differentes , je veux selectionner le maximum entre ces trois champs et le nom de la table qui contient la plus grande valeur.
comment faire?
merci d'avance
- ça dépend grandement de ton SGBD
- seul un admin pourra lancer ta requête (utilisation de la méta base)
- ton modèle de donnée doit probablement être à revoir
j utilise Oracle 10g
je suis l administrateur de la base.
merci de m aider a construire cette requete
Pourriez-vous nous présenter une ébauche de la requête que vous tentez de mettre au point ainsi que le structure des tables en jeu.
Cela sera plus facile pour vous aider à la faire évoluer.
Règles du forum Langage SQL à lire par tous
salut,
sous oracle la requette suivante devrais marcher nickel!
) group by nomtable
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select nomtable, max(dateeffet) from ( select "table1" nomtable, dateeffet from table1 where XXX union all select "table1", dateeffet from table1 where XXX union all select "table1", dateeffet from table1 where XXX
P.
oops, petit correctif.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT nomtable, max(dateeffet) FROM ( SELECT "table1" nomtable, dateeffet FROM table1 WHERE XXX union ALL SELECT "table2", dateeffet FROM table2 WHERE XXX union ALL SELECT "table3", dateeffet FROM table3 WHERE XXX ) group by nomtable
j ai fait :
et le resultat est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT nomtable, max(dateeffet) FROM ( SELECT 'CTMS_MVDIVISION' nomtable, dateeffet FROM CTMS_MVDIVISION WHERE matricule=x union ALL SELECT 'CTMS_MVSERVICES' nomtable, dateeffet FROM CTMS_MVSERVICES WHERE matricule=x union ALL SELECT 'CTMS_MVUNITE' nomtable, dateeffet FROM CTMS_MVUNITE WHERE matricule=x) group by nomtable
NOMTABLE MAX(DATE
CTMS_MVUNITE 01/11/07
CTMS_MVSERVICES 01/10/07
CTMS_MVDIVISION 12/07/06
Mais moi je veux afficher uniquement la premiere ligne
CTMS_MVUNITE 01/11/07
Comment faire?
Code : Sélectionner tout - Visualiser dans une fenêtre à part having max(dateeffet) = dateeffet
lorsque je fais Having max(dateeffet)=dateeffet
il me dit
dateeffet N'est pas une expression GROUP BY
encore pas de reponse???
Et comme ça ?[EDIT]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT nomtable, max(max_date) FROM ( SELECT 'CTMS_MVDIVISION' nomtable, max(dateeffet) max_date FROM CTMS_MVDIVISION WHERE matricule=x group by nomtable union ALL SELECT 'CTMS_MVSERVICES' nomtable, max(dateeffet) max_date FROM CTMS_MVSERVICES WHERE matricule=x group by nomtable union ALL SELECT 'CTMS_MVUNITE' nomtable, max(dateeffet) max_date FROM CTMS_MVUNITE WHERE matricule=x group by nomtable) GROUP BY nomtable
Oups, désolé, c'est n'importe quoi, ça ne marche pas... Je continue de chercher
[/EDIT]
comme ca ca marche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SELECT nomtable, max(dateeffet) FROM ( SELECT 'CTMS_MVDIVISION' nomtable, dateeffet FROM CTMS_MVDIVISION WHERE matricule=x union ALL SELECT 'CTMS_MVSERVICES' nomtable, dateeffet FROM CTMS_MVSERVICES WHERE matricule=x union ALL SELECT 'CTMS_MVUNITE' nomtable, dateeffet FROM CTMS_MVUNITE WHERE matricule=x) HAVING max(dateeffet) = (select max(dateeffet) from ( SELECT dateeffet FROM CTMS_MVDIVISION WHERE matricule=x union ALL SELECT dateeffet FROM CTMS_MVSERVICES WHERE matricule=x union ALL SELECT dateeffet FROM CTMS_MVUNITE WHERE matricule=x)) GROUP BY nomtable
Ha ben chuis grillé...
Bon j'ai pas tout à fait la même, donc je mets aussi ma requête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 select nomtable, dateeffet from (select 'CTMS_MVDIVISION' nomtable, dateeffet FROM CTMS_MVDIVISION WHERE matricule=x union ALL SELECT 'CTMS_MVSERVICES' nomtable, dateeffet FROM CTMS_MVSERVICES WHERE matricule=x union ALL SELECT 'CTMS_MVUNITE' nomtable, dateeffet FROM CTMS_MVUNITE WHERE matricule=x ) where dateeffet=(select max(dateffet) from (select dateeffet FROM CTMS_MVDIVISION WHERE matricule=x union ALL SELECT dateeffet FROM CTMS_MVSERVICES WHERE matricule=x union ALL SELECT dateeffet FROM CTMS_MVUNITE WHERE matricule=x ))
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager