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

 PostgreSQL Discussion :

indice de ligne


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 8
    Points
    8
    Par défaut indice de ligne
    * Bonjour, *

    Existe-t-il une commande postgresql qui permet d'avoir pou chaque ligne d'une requête l'indice de la ligne ?

    Par exemple la requête =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT dossard
    FROM vue_course_veteran
    renvoi le résultat =>

    5
    2
    3
    4

    Les chiffres sont les dossards, ils arrivent tous dans l'ordre d'arriver de la course ( le 5 est le premier quoi).
    J'aimerais avoir le numéro de la ligne correspondant à ces numéro.


    donner-ligne( 5 ) => 1

    En sachant que je ne veux/peux pas insérer de clé ,OID ou quoi que ce soit pour compter le nombres de lignes.

    je veux juste le numéro de la ligne correspondant à un champs qui est "unique" est-ce possible ?

    * Merci *

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 008
    Points : 23 684
    Points
    23 684
    Par défaut
    Bonjour,

    Y a-t-il un champ sur lequel s'appuyer pour trier l'ordre de ces lignes (un ordre d'arrivée) ?
    Ce que vous voulez, c'est le couple dossard-ordre d'arrivée ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par maxiplay Voir le message
    je veux juste le numéro de la ligne correspondant à un champs qui est "unique" est-ce possible ?
    Oui en utilisant les fonctions de fenêtrage comme RANK(), DENSE_RANK() ou ROW_NUMBER. Lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/article...clause-window/
    Mais il nous faut l'expression qui ordonnera ces rangs. Pr exemple si ce sont sur les temps de course :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *, RANK() OVER(ORDER BY COURSE_TEMP DESC) AS N
    FROM   ...
    ORDER BY N
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 8
    Points
    8
    Par défaut over ne fonctionne pas
    Merci de vos réponses,

    ced dit:
    Y a-t-il un champ sur lequel s'appuyer pour trier l'ordre de ces lignes (un ordre d'arrivée) ?
    Ce que vous voulez, c'est le couple dossard-ordre d'arrivée ?
    Oui! il y a une table "arrivee" qui est construite comme ceci =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE arrivee
    (
      arrivee_dossard integer NOT NULL,
      arrivee_heure integer,
      arrivee_minute integer,
      arrivee_seconde integer,
      arrivee_centieme integer,
      arrivee_id serial NOT NULL,
      CONSTRAINT arrivee_pkey PRIMARY KEY (arrivee_id),
      CONSTRAINT arrivee_arrivee_dossard_fkey FOREIGN KEY (arrivee_dossard)
          REFERENCES inscription (inscription_dossard) MATCH FULL
          ON UPDATE NO ACTION ON DELETE NO ACTION,
      CONSTRAINT arrivee_arrivee_dossard_key UNIQUE (arrivee_dossard)
    )

    arrivee_id est l'ordre d'arriver.Mon problème ici est que je ne souhaite pas donner le classement général du coureur mais son CLASSEMENT DANS SA CATEGORIE D'AGE !

    par exemple :

    NOM | PRENOM | classement | classement_de_categorie

    J'aurais aimé établir un classement des vétérans au sein même du classement général.

    Or sqlpro dit:

    Oui en utilisant les fonctions de fenêtrage comme RANK(), DENSE_RANK() ou ROW_NUMBER. Lisez l'article que j'ai écrit à ce sujet :
    Cela tombait pile poil !

    donc faire un RANK() en prenant comme critère la catégorie et le classement_general.

    malheureusement ,j'ai essayé de faire une requête simple =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     SELECT  inscription.inscription_nom, inscription.inscription_prenom,RANK()    OVER(ORDER BY arrivee.arrivee_id DESC)
     
       FROM inscription, arrivee
      WHERE arrivee.arrivee_dossard= inscription.inscription_dossard


    et voila le CODE ERREUR que postgresql 8.4 me signal


    ERROR: syntax error at or near "OVER"
    LINE 1: ...iption_nom, inscription.inscription_prenom,RANK() OVER(ORDER...
    ^

    ********** Erreur **********

    ERROR: syntax error at or near "OVER"
    État SQL :42601
    Caractère : 77
    OVER NE FONCTIONNE PAS

    voila j'ai sans doute mal fait ma requête ou mal compris le principe du OVER j'aurais besoin de vos lumières.

    Merci, bonne journée

  5. #5
    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
    Le message d'erreur laisse à penser que ce n'est pas postgresql 8.4, mais une version antérieure.
    Il faudrait faire pour vérifier.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 8
    Points
    8
    Par défaut oupss
    re bonjour


    oui en effet c'est la version

    "PostgreSQL 8.3.13, compiled by Visual C++ build 1400"

    Je me renseigne si le OVER fonctionne sous cette version à moins que quelqu'un me le dise lol

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 8
    Points
    8
    Par défaut pas à jour
    Bon ba ma version de postgres est trop ancienne pour couvrir le "OVER" .
    Le OVER est soutenue que à partir de la version 8.4.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 8
    Points
    8
    Par défaut maj version 9
    Salut !
    J'ai fait la migration de ma base vers la 9.0.3 et le OVER fonctionne parfaitement
    reste plus qu'a trouver un moyen de d'avoir mon classement par catégorie je bosse et je vous tiens au courant salut!

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

Discussions similaires

  1. Problème indice de ligne avec fonction Large
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 22/07/2011, 15h49
  2. [Débutant] conserver dans un vecter des indices de lignes et colonnes d'une matrice
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 4
    Dernier message: 09/03/2010, 20h57
  3. [XL-2007] Récupérer l'indice de ligne d'une forme
    Par Gregs dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/04/2009, 22h11
  4. indicer les lignes d'un fichier texte
    Par cre31400 dans le forum C++
    Réponses: 18
    Dernier message: 17/07/2008, 17h08
  5. Recuperer l'indice de ligne d'une plage de cellules fusionnées
    Par jafarMUC dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/04/2008, 15h07

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