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 :

[postgresql 8.3] Requete Update


Sujet :

PostgreSQL

  1. #1
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut [postgresql 8.3] Requete Update
    Bonjour ,

    J'ai une table d'échantillons de terre avec notamment les 4 champs suivants :
    id_action bigserial NOT NULL, -- identifiant de l'action (PK)
    id_echantillon bigint, -- Identifiant de l'échantillon
    date_action date NOT NULL, -- date de réalisation de l'action
    ordre_action integer, -- n° d'ordre des actions pour le même échantillon dans le même jour

    J'ai des données dans la table , mais le champ ordre_action est un nouveau champ , donc null.

    Je voudrais faire un update de ordre_action de la façon suivante :

    Pour un même echantillon , à une date d'action donnée, numéroter le champ ordre_action en utilisant l'ordre croissant du champ id_action .

    exemple :
    echantillon date_action id_action --> ordre_action
    1 6juin 1 --> mettre 1
    1 7juin 2 --> mettre 1
    1 7juin 3 --> mettre 2
    2 7juin 4 --> mettre 1
    2 7juin 5 --> mettre 2

    Merci d'avance !

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    La moindre des choses quand vous demandez de l'aide est de se conformer à la charte de postage et de fournir le DDL des tables ainsi qu'un jeu d'essais sous forme INSERT afin que l'on puisse vous aider.
    Comme ceci :
    1) la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE echantillon
    (
    id_action bigserial NOT NULL, -- identifiant de l'action (PK)
    id_echantillon bigint, -- Identifiant de l'échantillon
    date_action date NOT NULL, -- date de réalisation de l'action
    ordre_action integer
    );
    2) l'échantillon de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO echantillon (id_echantillon, date_action, ordre_action) VALUES 
    (1, '2012-06-06', NULL),
    (1, '2012-06-07', NULL),
    (1, '2012-06-07', NULL),
    (2, '2012-06-07', NULL),
    (2, '2012-06-07', NULL);
    Pensez y à l'avenir car cela évite de faire perdre du temps ! Aussi bien à nous, qu'a vous !!!

    Maintenant voici la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    WITH T AS
    (
    SELECT *,
           ROW_NUMBER() OVER(PARTITION BY id_echantillon, date_action ORDER BY id_action) AS ordre
    FROM echantillon
    )
    UPDATE echantillon AS TC
    SET    ordre_action = (SELECT ordre FROM T WHERE id_action = TC.id_action)
     
    SELECT *
    FROM   echantillon;
    Pour apprendre SQL, mon site web comme mon bouquin, peuvent vous y aider !

    Notamment :
    fonctions de fenêtrage : http://sqlpro.developpez.com/article...clause-window/
    CTE : http://sqlpro.developpez.com/cours/s...te-recursives/

    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/ * * * * *

  3. #3
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut
    Merci pour la réponse ,
    et désolé pour le non respect de la charte de postage

    Malheureusement je ne suis qu'en 8.3 jusqu'à octobre 2012 et je ne peux pas utiliser WITH

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    WITH n 'est qu'une simplification d'écriture. Il suffit d'utiliser une sous requête en table dérivée.

    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/ * * * * *

  5. #5
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut
    Bonjour et encore merci .

    En fait , c'est aussi l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ROW_NUMBER() OVER(PARTITION BY
    qui me pose pb en 8.3

    J'ai du mal à la traduire en 8.3

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    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,


    dans la doc que vous a fournit SqlPro il y a les équivalance (pour certain cas) des requêtes avec fonction de fenêtrage.

    Votre cas y figure. (requête scalaire mais bon ..)

  7. #7
    Membre actif
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

    Je suis allé sur http://sqlpro.developpez.com/article...clause-window/

    Pourriez-vous me dire quel est l'exemple qui se rapproche le plus de ma problématique ?

    Merci

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    II-A. exemple 2.

    Sachant que les fonctions Rank() / Dense_rank() / row_number() s'utilisent de la même manière

Discussions similaires

  1. Requete UPDATE !!!
    Par fages dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/07/2004, 16h52
  2. [SYBASE] optimisation requete UPDATE
    Par metheorn dans le forum Sybase
    Réponses: 8
    Dernier message: 24/05/2004, 17h01
  3. [version] Requete Update avec différentes versions de mySQL
    Par regbegpower dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/01/2004, 17h19
  4. Requete update
    Par gianfare dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/10/2003, 09h04
  5. [debutante] erreur requete update
    Par LineLe dans le forum ASP
    Réponses: 5
    Dernier message: 12/09/2003, 13h05

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