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 28/10/2011, 11h22   #1
Membre habitué
 
Inscription : juin 2006
Messages : 487
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 487
Points : 136
Points : 136
Par défaut Problème avec ma requête oracle

Bonjour,

donc voici ma requête :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
SELECT TITRE,
          NOM,
          PRENOM,
          DTENAI,
          NUMCHAMBRE,
          COMPTERENDU,
          DTECRE
     FROM glit_situation s
          INNER JOIN patients p
             ON p.numpat = s.numpat
          LEFT OUTER JOIN objets x
             ON (x.numpat=s.numpat AND x.NUMSERV = 41) 
    WHERE numus = 208 AND NUMDESCRIPTION=20029 AND DEFFEN=20021 AND COMPTERENDU LIKE '179%'
Ça me renvoie :



mr cocu     dupont  27/10/2011
mr simon    gorge    28/10/2011
mr simon    gorge    27/10/2011
mr edouart raphael  26/10/2011
j'ai un doublon :

mr simon    gorge    28/10/2011
mr simon    gorge    27/10/2011
Et je voudrais garder la ligne qui a la plus grande date !

Donc je voudrais le résultat suivant:

mr cocu     dupont  27/10/2011
mr simon    gorge    28/10/2011
mr edouart raphael  26/10/2011

Comment puis je faire ??

D'avance merci
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 12h28   #2
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Bonjour,
En utilisant l'aggrégation et le group by :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT TITRE,
          NOM,
          PRENOM,
          MAX(DTECRE)
     FROM glit_situation s
          INNER JOIN patients p
             ON p.numpat = s.numpat
          LEFT OUTER JOIN objets x
             ON (x.numpat=s.numpat AND x.NUMSERV = 41) 
    WHERE numus = 208 AND NUMDESCRIPTION=20029 AND DEFFEN=20021 AND COMPTERENDU LIKE '179%'
GROUP BY TITRE,
          NOM,
          PRENOM
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/10/2011, 12h42   #3
Membre habitué
 
Inscription : juin 2006
Messages : 487
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 487
Points : 136
Points : 136
Merci de ton aide tedo01 ,

Mais je dois aussi afficher un autre champ qui est différent pour chaque enregistrement et je dois garder celui avec "la date la plus grande"

ex:

Code :
1
2
3
4
5
 
mr cocu     dupont  27/10/2011  blabla1
mr simon    gorge    28/10/2011  blabla2
mr simon    gorge    27/10/2011  blalbla3
mr edouart raphael  26/10/2011  blabla4
Donc je voudrais le résultat suivant:

Code :
1
2
3
4
 
mr cocu     dupont  27/10/2011  blabla1
mr simon    gorge    28/10/2011  blabla2
mr edouart raphael  26/10/2011  blabla4
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 13h51   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
FIRST et LAST
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT TITRE, NOM, PRENOM,
       MAX(DTECRE) keep (dense_rank first ORDER BY dtecre DESC) AS dtecre,
       MAX(autre_champ) keep (dense_rank first ORDER BY dtecre DESC) AS autre_champ,
  FROM glit_situation s
 INNER JOIN patients p ON p.numpat = s.numpat
  LEFT OUTER JOIN objets x ON (x.numpat=s.numpat AND x.NUMSERV = 41) 
 WHERE numus = 208 
   AND NUMDESCRIPTION = 20029 
   AND DEFFEN = 20021 
   AND COMPTERENDU LIKE '179%'
 GROUP BY TITRE, NOM, PRENOM
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 15h54   #5
Membre habitué
 
Inscription : juin 2006
Messages : 487
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 487
Points : 136
Points : 136
Merci de ton aide(je ne connaissais pas first et last) .

Mais je bloque toujours .

Ma requête :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
 
SELECT TITRE, NOM, PRENOM,
       MAX(DTECRE) keep (dense_rank first ORDER BY dtecre DESC) AS dtecre
  FROM glit_situation s
 INNER JOIN patients p ON p.numpat = s.numpat
  LEFT OUTER JOIN objets x ON (x.numpat=s.numpat AND x.NUMSERV = 41) 
 WHERE numus = 208 
   AND NUMDESCRIPTION = 20029 
   AND DEFFEN = 20021 
   AND COMPTERENDU LIKE '179%'
 GROUP BY TITRE, NOM, PRENOM
Il m'affiche bien :

Code :
1
2
3
4
 
mr cocu     dupont  27/10/2011  
mr simon    gorge    28/10/2011 
mr edouart raphael  26/10/2011
Mais je n'arrive pas a rajouter mon champs compterendu(blabla) de type blob car ne peut pas faire un Group By !

je voudrais avoir comme résultat :

Code :
1
2
3
4
 
mr cocu     dupont  27/10/2011  blabla1
mr simon    gorge    28/10/2011  blabla2
mr edouart raphael  26/10/2011  blabla4
jacko842 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 16h11   #6
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 256
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 256
Points : 1 872
Points : 1 872
Bonjour,

C'est possible en modifiant le where :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT TITRE,
          NOM,
          PRENOM,
          DTENAI,
          NUMCHAMBRE,
          COMPTERENDU,
          DTECRE
     FROM glit_situation s
          INNER JOIN patients p
             ON p.numpat = s.numpat
          LEFT OUTER JOIN objets x
             ON (x.numpat=s.numpat AND x.NUMSERV = 41) 
    WHERE numus = 208 AND NUMDESCRIPTION=20029 AND DEFFEN=20021 AND COMPTERENDU LIKE '179%'
and dtecre=(select max(dtecre) from...)
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 16h17   #7
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
euh vu la requete autant passer par une fonction de fenetrage car se tapper 2 scannages de table à cause du like c'est pas forcément tip top :p


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
WITH tmp AS (
SELECT TITRE, NOM, PRENOM,danse_rank() over(partition BY p.numpat ORDER BY dtecre DESC) AS rnk
   FROM glit_situation s
 INNER JOIN patients p ON p.numpat = s.numpat
  LEFT OUTER JOIN objets x ON (x.numpat=s.numpat AND x.NUMSERV = 41) 
 WHERE numus = 208 
   AND NUMDESCRIPTION = 20029 
   AND DEFFEN = 20021 
   AND COMPTERENDU LIKE '179%')
 
 
SELECT * 
FROM tmp
WHERE rnk = 1
Plus qu'a rajotuer votre blob ...soit dans le select de tmp soit en sortie par jointure.
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 16h36   #8
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Citation:
Envoyé par jacko842 Voir le message
Mais je n'arrive pas a rajouter mon champs compterendu(blabla) de type blob car ne peut pas faire un Group By !
Oui si l'autre_champ est de type blob il faut passer par une fonction de fenêtrage comme proposé par Punkoff.
skuatamad 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 09h06.


 
 
 
 
Partenaires

Hébergement Web