IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Extraire les 1ères lignes pour chaque type de valeur


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut Extraire les 1ères lignes pour chaque type de valeur
    Bonjour,

    J’ai une requête genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select a, b, c
    from (select …. )
    order by a,c desc
    Le but est d'extraire b pour chaque a ayant la plus grosse valeur. S'il y a plusieurs c pour un a, il ne faut que le 1er
    Voici un exemple :
    0000133863 UWNF 59 548 294 186,61
    0000150292 UWF 44 343 842 900,00
    0000150292 CB 360 000 000,00
    0000150311 UWF 85 524 637 827,20
    0000151052 UWNF 162 937 089 592,66
    0000152750 UWF 28 211 127 050,36
    0000152750 REPO 1 310 069 863,00
    0000152750 CB 220 000 000,00
    0000152751 UWF 53 929 111 278,37
    0000152751 CB 320 000 000,00
    0000155942 UWF 206 234 687 292,73
    0000155942 UWNF 1 784 282,67
    0000156259 UWF 82 894 630 338,89
    0000240050 IGCP 1 436 570 306 952,78
    0000405514 UWF 56 000 000 000,00
    Le but est de récupérer les valeurs en rouge.
    Je pense qu'il doit y avoir un moyen de le faire avec une requête analytique, mais je sèche.
    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    A moins que je sois passé à côté d'un évidence, les critères de sélection des lignes sont loin d'être clairs.
    Sur quelle(s) colonne(s) se fait le regoupement ? Sur quelle(s) colonne(s) se fait la sélection ?

    Le but est d'extraire b pour chaque a ayant la plus grosse valeur. S'il y a plusieurs c pour un a, il ne faut que le 1er
    Sur le principe, ce serait quelque chose du style (en supposant que le premier c signifie le plus petit) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH	tmp
    AS  (   SELECT  a
                ,   b
                ,   c
                ,   RANK() OVER (PARTITION BY b ORDER BY a DESC, c ASC) AS rnk
            FROM    matable
        )   
    SELECT	a
        ,   b
        ,   c
    FROM    tmp
    WHERE   rnk = 1
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    Merci, c'est parfait
    C'est pour un curseur, donc du PL/SQL et ça m'évite de le faire en PL

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Cherchez sur ce forum des exemples de Keep avec Last/First.

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    Ah ! Autre piste
    Je vais chercher. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/05/2009, 23h23
  2. Réponses: 4
    Dernier message: 21/03/2008, 17h40
  3. Lecture du fichier ini 1 ligne pour chaque Textbox
    Par kazylax dans le forum VB.NET
    Réponses: 19
    Dernier message: 13/03/2008, 03h59
  4. Les n premiers pour chaque groupe
    Par Sakalam dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/07/2007, 16h01
  5. Réponses: 3
    Dernier message: 23/01/2004, 21h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo