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

Requêtes PostgreSQL Discussion :

le comportement de la fonction first_value


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 213
    Points : 105
    Points
    105
    Par défaut le comportement de la fonction first_value
    bonjour,

    j'aimerais savoir si la fonction first_value se comporte ainsi ou c'est moi qui l'applique mal.

    admettons ces données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    COL1	COL2
    a	1
    a	3
    a	2
    b	2
    l'idée en fait serait que le résultat de ma requête soit :


    du coup j'utilise la fonction first_value()

    mais j'ai l'impression qu'il me renvoie la première valeur de l'ensemble des lignes :


    existe-t-il une fonction qui pourrait répondre à mon besoin ?

    merci de votre aide.

    sai

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Il me semble que DISTINCT ON pourrai répondre à votre besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select distinct on (col1) col1, col2
    from ma_table
    order by col1, col2

    http://www.postgresql.org/docs/9.1/s...l#SQL-DISTINCT

    Ceci étant dit c'est du spécifique pgsql.
    En SQL normatif il faudrai passer par des fonctions de fenetrage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    with tmp as (
    select col1, col2, 
    row_number() over(partition by col1 order by col1, col2) as rnk
    from ma_table)
     
    select * 
    from tmp
    where rnk = 1

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 213
    Points : 105
    Points
    105
    Par défaut
    merci.

    le problème avec DISTINCT ON c'est que pour un résultat de 10000 lignes si je mets COL2 en paramètre du ON PGSQL va me sortir uniquement 3 lignes si dans COL2 je n'ai que 3 valeurs uniques...

    L'idée serait que pour chaque groupe sortir la première valeur et non la première valeur que le curseur voit pour l'appliquer à chaque ligne...

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    En quoi est-ce que le très basique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select col1, min(col2) from table group by col1
    ne répond pas à la question?

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Gnii ?

    Avez-vous essayé les deux propositions ?
    Car ca devrait répondre à votre besoin.

    Concernant le distinct on je ne mettrai pas la col2 dedans.


    sur la 2eme y a une petite erreur, il faudra l'écrire comme ça (trompé dans l'order by)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    WITH tmp AS (
    SELECT col1, col2, 
    row_number() over(partition BY col1 ORDER BY col2) AS rnk
    FROM ma_table)
     
    SELECT * 
    FROM tmp
    WHERE rnk = 1
    sinon pour le first_value() le principe est décrit ici http://lalystar.developpez.com/fonct...ytiques/#L3.10

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 213
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par estofilo Voir le message
    En quoi est-ce que le très basique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select col1, min(col2) from table group by col1
    ne répond pas à la question?
    lol...euh en tout...putain me suis pris la tête pour rien

    merci !

    bon juste pour ma culture...à quoi sert la fonction first_value() du coup ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Consultant
    Inscrit en
    Octobre 2004
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 254
    Points : 608
    Points
    608
    Par défaut
    Ben à avoir la 1ère valeur de l'agrégat, et pas le minimum.
    Vous deviez avoir un pb de tri sur votre premier essai.

    Cdlt, Arnaud.

    Citation Envoyé par saigon Voir le message
    lol...euh en tout...putain me suis pris la tête pour rien

    merci !

    bon juste pour ma culture...à quoi sert la fonction first_value() du coup ?

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

Discussions similaires

  1. Comportement de la fonction get_class_vars
    Par BenFett dans le forum Langage
    Réponses: 2
    Dernier message: 11/02/2010, 15h53
  2. comportement de la fonction mailto
    Par laurentSc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 19/01/2010, 08h19
  3. comportement de ma fonction
    Par Setsuna_00 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/07/2009, 12h26
  4. Comportement de la fonction MINUS
    Par Philomelo dans le forum Langage SQL
    Réponses: 9
    Dernier message: 28/05/2009, 23h40
  5. comportement de la fonction strtok()
    Par Arronax dans le forum C++
    Réponses: 3
    Dernier message: 15/04/2008, 15h03

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