Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 09/02/2012, 15h46   #1
Invité régulier
 
Inscription : mai 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 6
Points : 5
Points : 5
Envoyer un message via MSN à Omega15
Par défaut Requête assez complexe

Bonjour a tous,
j'aurais besoin d'aide concernant un problème de création de requête et de récupération de données.

Je vais donner un exemple pour que tout le monde comprenne mon besoin.

En base de donnée j'ai quelque chose comme ça dans ma table 'TEST'

PERSONNE | CHAMP | VALEUR | DATE_MODIFICATION
toto 01 10 01/01/2010
toto 01 12 02/01/2010
toto 01 20 03/01/2010
toto 02 01 01/01/2010
toto 02 02 02/01/2010
toto 03 21 02/01/2010
toto 03 22 04/01/2010
toto 03 28 05/01/2010
toto 04 48 01/01/2010

D'autres personnes et d'autres champs existent mais je réduis pour l'exemple.

Ma question est la suivante :

Comment est-il possible de récupérer pour chaque PERSONNE , la VALEUR des CHAMP pour la DATE_MODIFICATION la plus grande.

Le résultat devrait donner.

PERSONNE | CHAMP | VALEUR | DATE_MODIFICATION
toto 01 20 03/01/2010
toto 02 02 02/01/2010
toto 03 22 05/01/2010
toto 04 48 01/01/2010

Je n'arrive pas à voir la requête pour résoudre ce problème.

Merci d'avance à ceux qui pourront m'aider.
Omega15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 15h57   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
C'est très facile avec FIRST et LAST
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SQL>   WITH test (PERSONNE , CHAMP , VALEUR , DATE_MODIFICATION) AS (
  2  SELECT 'toto', '01', '10', to_date('01/01/2010','dd/mm/yyyy') FROM dual union ALL
  3  SELECT 'toto', '01', '12', to_date('02/01/2010','dd/mm/yyyy') FROM dual union ALL
  4  SELECT 'toto', '01', '20', to_date('03/01/2010','dd/mm/yyyy') FROM dual union ALL
  5  SELECT 'toto', '02', '01', to_date('01/01/2010','dd/mm/yyyy') FROM dual union ALL
  6  SELECT 'toto', '02', '02', to_date('02/01/2010','dd/mm/yyyy') FROM dual union ALL
  7  SELECT 'toto', '03', '21', to_date('02/01/2010','dd/mm/yyyy') FROM dual union ALL
  8  SELECT 'toto', '03', '22', to_date('04/01/2010','dd/mm/yyyy') FROM dual union ALL
  9  SELECT 'toto', '03', '28', to_date('05/01/2010','dd/mm/yyyy') FROM dual union ALL
 10  SELECT 'toto', '04', '48', to_date('01/01/2010','dd/mm/yyyy') FROM dual
 11  )
 12  SELECT personne, champ,
 13         max(valeur) keep (dense_rank first ORDER BY date_modification DESC) AS max_val,
 14         max(date_modification)
 15    FROM test
 16   GROUP BY personne, champ
 17  /
 
PERS CH MA MAX(DATE
---- -- -- --------
toto 01 20 03/01/10
toto 02 02 02/01/10
toto 03 28 05/01/10
toto 04 48 01/01/10
 
SQL>
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 09/02/2012, 15h59   #3
Invité régulier
 
Inscription : mai 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 6
Points : 5
Points : 5
Envoyer un message via MSN à Omega15
Haaaaaaaa,
je vais essayer tout de suite.

Merci.
Omega15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 16h07   #4
Invité régulier
 
Inscription : mai 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 6
Points : 5
Points : 5
Envoyer un message via MSN à Omega15
Ho ca marche, parfait.
c'est juste ce qu'il me faut.
Maintenant il faut que je comprenne le principe du First Last pour pouvoir le réutiliser plus tard.

Encore merci pour la réponse rapide et pertinente.
Omega15 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h35.


 
 
 
 
Partenaires

Hébergement Web