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 01/02/2012, 13h18   #1
Invité de passage
 
Homme ludovic
Chef de projet MOA
Inscription : janvier 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme ludovic
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Service public

Informations forums :
Inscription : janvier 2012
Messages : 2
Points : 0
Points : 0
Par défaut Problème rédaction requête SQL

Bonjour,

Je n'arrive pas à trouver la syntaxe (sans mêler 2 select imbriqués) qui me permettrait de sortir le résultat suivant de la table ci dessous.

Par avancer merci pour vos retours, Cordialement.

Table:

Loc Occ Date
1 1 01/01/2011
1 2 01/03/2011
1 3 01/02/2012
2 1 01/01/2011
2 2
3 1 01/01/2011
3 2 01/02/2012

Retour souhaité :

1 3 01/02/2012
3 2 01/02/2012


Je souhaite donc récupérer le Loc, le max(Occ) et sa date, que quand le max(occ) par loc a une date de renseignée.
ludoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 14h34   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 688
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 688
Points : 10 444
Points : 10 444
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Avec une fonction de fenêtrage :
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
WITH MaTable AS
(
SELECT 1 AS Loc, 1 AS Occ, '01/01/2011' AS Date FROM dual union ALL
SELECT 1       , 2       , '01/03/2011'         FROM dual union ALL
SELECT 1       , 3       , '01/02/2012'         FROM dual union ALL
SELECT 2       , 1       , '01/01/2011'         FROM dual union ALL
SELECT 2       , 2       , NULL                 FROM dual union ALL
SELECT 3       , 1       , '01/01/2011'         FROM dual union ALL
SELECT 3       , 2       , '01/02/2012'         FROM dual 
)
  , SR AS
(
SELECT Loc, Occ, Date
     , row_number() over(partition BY Loc ORDER BY Occ DESC) AS rn
  FROM MaTable
)
SELECT Loc, Occ, Date
  FROM SR
 WHERE rn = 1
   AND Date IS NOT NULL
 
Loc         Occ         Date
----------- ----------- ----------
1           3           01/02/2012
3           2           01/02/2012
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 14h56   #3
Invité de passage
 
Homme ludovic
Chef de projet MOA
Inscription : janvier 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme ludovic
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Service public

Informations forums :
Inscription : janvier 2012
Messages : 2
Points : 0
Points : 0
Merci pour vôtre réponse.

Par contre je n'ai pas du être assez explicite sur le contexte et je n'arrive donc pas à reproduire cette syntaxe. (Peut être n'aurais je pas du poster cette question ici).

Contexte:
Le fichier est sur une base oracle.
J'utilise Windev (ou progress) pour attaquer ce fichier par ODBC.
Dans le cas précis j'aimerais utiliser un SQLexec(......)


Si je comprends vôtre syntaxe vous stockez une colonne complémentaire dans le fichier pour indiquer quelle ligne est au max(occ), ce qui permet ensuite de faire un simple select avec conditions.

Mais je ne peux altérer la BDD source et le "row_number() over(partition BY Loc ORDER BY Occ DESC)" n'est pas une syntaxe reconnue.

Y a t il une autre solution ?

Merci de vôtre patience
ludoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 15h15   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 688
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 688
Points : 10 444
Points : 10 444
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Effectivement vous étiez sur le forum Microsoft SQL-Server, j'ai déplacé chez Oracle. J'ai du légèrement modifier le code.

row_number() existe depuis la 8i.

Quelle est votre version ?
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h26.


 
 
 
 
Partenaires

Hébergement Web