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 17/02/2011, 09h42   #1
Invité de passage
 
Inscription : mars 2005
Messages : 11
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 11
Points : 1
Points : 1
Par défaut Aide en SQL sur la clause SELECT

Bonjour,
je ne suis pas très doué en SQL, j'ai les données suivantes :

ACTE_COD ACDT_MODIF FORFAI_COD
---------- ------------ ------------
AAQN004 10/03/2005 2
AAQN004 20/07/2005 2
AAQN004 10/08/2007 2
AAQN004 21/01/2010 2
AAQN900 10/03/2005 2
AAQN901 10/03/2005 2
ACQH001 10/03/2005 1
ACQH001 20/07/2005 1
ACQH001 21/01/2010 1
ACQH001 10/08/2007 1
ACQH002 10/03/2005 1
ACQH002 21/01/2010 2
ACQH002 20/07/2005 1
ACQH002 10/08/2007 1
...

J'aimerais pouvoir récupérer en SQL les champs ACTE_COD & FORFAI_COD pour la date la plus récente de chaque ACTE_COD.
Le résultat attendu serait :

ACTE_COD ACDT_MODIF FORFAI_COD
---------- ------------ ------------
AAQN004 21/01/2010 2
AAQN900 10/03/2005 2
AAQN901 10/03/2005 2
ACQH001 21/01/2010 1
ACQH002 21/01/2010 2

Merci d'avance.
frglyon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 10h26   #2
Membre actif
 
Homme Cyrille
Administrateur de base de données
Inscription : avril 2005
Messages : 112
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 32
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : avril 2005
Messages : 112
Points : 191
Points : 191
Salut,

essaye ceci.

Code :
1
2
3
 
SELECT ACTE_COD, max(ACDT_MODIF), FORFAI_COD FROM tatable
GROUP BY ACTE_COD, FORFAI_COD
IndianaAngus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 10h39   #3
Invité de passage
 
Inscription : mars 2005
Messages : 11
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 11
Points : 1
Points : 1
Le résultat obtenu est :

ACTE_COD ACDT_MODIF FORFAI_COD
---------- ------------ ------------
AAQN004 21/01/2010 2
AAQN900 10/03/2005 2
AAQN901 10/03/2005 2
ACQH001 21/01/2010 1
ACQH002 10/08/2007 1
ACQH002 21/01/2010 2

Cela n'est pas trop top, car pour le code ACQH002, j'ai 2 rows retournées et non une seule (celle en gras étant de trop).
frglyon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 10h51   #4
Membre actif
 
Homme Cyrille
Administrateur de base de données
Inscription : avril 2005
Messages : 112
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 32
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : avril 2005
Messages : 112
Points : 191
Points : 191
Citation:
Envoyé par frglyon Voir le message
Le résultat obtenu est :

ACTE_COD ACDT_MODIF FORFAI_COD
---------- ------------ ------------
AAQN004 21/01/2010 2
AAQN900 10/03/2005 2
AAQN901 10/03/2005 2
ACQH001 21/01/2010 1
ACQH002 10/08/2007 1
ACQH002 21/01/2010 2

Cela n'est pas trop top, car pour le code ACQH002, j'ai 2 rows retournées et non une seule (celle en gras étant de trop).
En effet, j'avais mal vu. Ceci devrait convenir

Code :
1
2
3
4
 
SELECT ACTE_COD, max(ACDT_MODIF), max(FORFAI_COD) FROM tatable
GROUP BY ACTE_COD
ORDER BY ACTE_COD
IndianaAngus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 11h19   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Plutôt comme ceci :
Code :
1
2
3
4
5
6
  SELECT ACTE_COD,
         max(ACDT_MODIF) AS ACDT_MODIF,
         max(FORFAI_COD) keep(dense_rank first ORDER BY ACDT_MODIF DESC) AS FORFAI_COD
    FROM MaTable
GROUP BY ACTE_COD
ORDER BY ACTE_COD;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 14h27   #6
Invité de passage
 
Inscription : mars 2005
Messages : 11
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 11
Points : 1
Points : 1
Merci de m'aider, hélas ce n'est toujours pas bon.
Il faut dire que j'avais omis de vous dire que le SBGD attaqué est de l'Oracle.

Waldar,
j'ai un erreur d'exécution avec ta requête ORA-00923: FROM keyword not found where expected en se positionnant sur le mot-clé dense.

Indiana,
ta requête ne me convient pas car si j'ai le jeu de données suivant :
ACTE_COD ACDT_MODIF FORFAI_COD
---------- ------------ ------------
AAQN004 21/01/2010 2
AAQN900 10/03/2005 2
AAQN901 10/03/2005 2
ACQH001 21/01/2010 1
ACQH002 10/08/2007 2
ACQH002 21/01/2010 1

je me retrouve avec
ACTE_COD ACDT_MODIF FORFAI_COD
---------- ------------ ------------
...
ACQH002 21/01/2010 2

au lieu de
ACTE_COD ACDT_MODIF FORFAI_COD
---------- ------------ ------------
...
ACQH002 21/01/2010 1

En fait, j'aimerais pour chaque code acte (ACTE_COD), le code forfait (FORFAI_COD) pour la date de modif (ACDT_MODIF) la plus récente.

Merci pour votre aide.
frglyon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 14h45   #7
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Citation:
Envoyé par frglyon Voir le message
Il faut dire que j'avais omis de vous dire que le SBGD attaqué est de l'Oracle.
Vous avez posté dans le forum Oracle, donc on s'en doutait, mais...

Citation:
Envoyé par frglyon Voir le message
j'ai un erreur d'exécution avec ta requête ORA-00923: FROM keyword not found where expected en se positionnant sur le mot-clé dense.
... il faut par contre toujours en préciser votre version.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 14h52   #8
Invité de passage
 
Inscription : mars 2005
Messages : 11
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 11
Points : 1
Points : 1
Oracle8 Release 8.0.6.0.0
frglyon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 15h07   #9
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
en effet, on peut oublier les fonctions analytiques !

Essaye comme ça
Code :
1
2
3
4
SELECT ACTE_COD, ACDT_MODIF,     FORFAI_COD
FROM MaTable a
WHERE acdt_modif = (SELECT MAX(b.acdt_modif) FROM MaTable b
			WHERE b.acte_cod = a.acte_code)
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 15h23   #10
Invité de passage
 
Inscription : mars 2005
Messages : 11
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 11
Points : 1
Points : 1
Cela me convient fort bien.

Merci à tous.
frglyon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 16h59   #11
Membre actif
 
Homme Cyrille
Administrateur de base de données
Inscription : avril 2005
Messages : 112
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 32
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : avril 2005
Messages : 112
Points : 191
Points : 191
Citation:
Envoyé par frglyon Voir le message
Cela me convient fort bien.

Merci à tous.

désolé de m'être planté si misérablement...
IndianaAngus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h09.


 
 
 
 
Partenaires

Hébergement Web