|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
![]() ![]() |
Bonjour, j'essaie de réaliser depuis tout a l'heure un requete SQL qui me semblait simple, mais je m'arrache les cheveux sur oracle.
J'ai une table, appelée RANK. Grosso modo Code x :
J'ai besoin de faire la requete suivante:retourner un tableau, groupé par employé, et dont les colonnes sont les valeurs les plus "récentes" au sens de la paire [RANK_START, RANK_END] (en fait, les dernière dans l'ordre de tri) J'arrive à faire du order by suivant mon critère, j'arrive à mettre mes closes WHERE pour filter les lignes dont le range START/END n'inclue pas aujourd'hui, mais je n'arrive par à prendre la "dernière row" pour chaque EMP_ID. D'après ce que je trouve sur le net, en SQL, c'est aussi simple que de faire Code sql :
seulement voilà, oracle butte sur last (invalid identifier) qu'il ne reconnait pas comme fonction d'aggrégation Donc pour faire simple, j'ai dans ma table Code x :
et je veux obtenir Code x :
Si quelqu'un peut m'aider. A noter que la requete rentrera en tant que sous requete comme partie droite dans une left outer join, le but final étant d'aplatire les tables Employé et rank pour avoir un tableau avec les données de l'employe et le "rank actuel". Donc si quelqu'un a une solution qui fait l'applatissement directement, c'est bon aussi. Pour le moment je part sur ce format Code sql :
FROM (<sous requete liant deux/trois TABLES pour former l employé>) e LEFT OUTER JOIN (<sous requete que j essaie ici de construire>) r ON e.emp_id=r.emp_id
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() "Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973) |
||||||||
|
|
00
|
|
|
#2 | ||||
![]() ![]() |
La fonction LAST en fait ne s'écrit pas ainsi, la syntaxe est un peu plus absconse :
Code :
Code :
__________________
Email : http://scr.im/waldar |
||||
|
00
|
|
|
#3 | |||||
![]() ![]() |
Citation:
Question subsidiaire, j'ai un WHERE qui élimine avant applatissement des lignes sur certains critères d'acceptation, je les met dans la clause where ou je les mets dans la condition analytique? Exemple: Code :
Citation:
Citation:
Si vous avez envie de la partie sportive, je peux toujours vous la filer mardi ^^
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() "Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973) |
|||||
|
|
00
|
|
|
#4 | ||
![]() ![]() |
ça marche, je vais pouvoir continuer à développer la requête
![]() Code :
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() "Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973) |
||
|
|
00
|
|
|
#5 | ||||||||
![]() ![]() |
Bravo !
Attention quand même à la cohérence des types des données, ici par exemple : Code :
Code :
Code :
Code :
__________________
Email : http://scr.im/waldar |
||||||||
|
00
|
|
|
#6 | ||||
![]() ![]() |
merci pour l'info
Bon au final, voilà le résultat Code :
![]() PS: question subsidiaire. Je pensait passer le contenu de cette vue dans une table tierce, qui contient beaucoup plus de colonnes, dont les autres colonnes resteront vide. Les colonnes communes ont le même nom. Oracle me refuse Code :
Suis-je obligé de tout énuméré ou y a-t-il moyen de dire à oracle de faire correspondre les colonnes de même nom entre la table du select et celle du insert?
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() "Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973) |
||||
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Est-vous certain que l'order by doit faire partie de la vue ?
Mettez des valeurs par défaut pour vos colonnes ; mais utiliser des inserts nommés : insert into table (col1, col2, …) select … c'est une très bonne pratique. |
|
|
00
|
|
|
#8 |
![]() ![]() |
l'order by, non, pas besoin dans la vue, il servait quand je faisait uniquement les selects au départ, après, la vue semble vivre très bien avec
j'avais justement espéré éviter de me coltiner l'énumération de 30 noms de colonnes C'est peut être une bonne pratique, mais il s'agit ici de transferts one-shot dans le cadre d'une migration de donnée, donc je peux garantir que les deux tables on des colonnes de même noms Sur ce merci bien et je clôture ce sujet
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() "Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com