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

HyperFileSQL Discussion :

SELECT sur une table relationelle


Sujet :

HyperFileSQL

  1. #1
    Membre éprouvé
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Points : 915
    Points
    915
    Par défaut SELECT sur une table relationelle
    Bonjour,
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    -- Script généré par WINDEV le 05/09/2021 12:30:34
    -- Tables de l'analyse Gestionarticles.wda
    -- pour SQL générique (ANSI 92)
     
    -- Création de la table article
    CREATE TABLE "article" (
        "IDarticle" NUMERIC(19,0)  PRIMARY KEY ,
        "titre" VARCHAR(60)  NOT NULL ,
        "nompassage" VARCHAR(20) ,
        "dateprevue" DATE ,
        "artsigne" BIT ,
        "page" SMALLINT );
    CREATE INDEX "WDIDX_article_titre" ON "article" ("titre");
    CREATE INDEX "WDIDX_article_nompassage" ON "article" ("nompassage");
    CREATE INDEX "WDIDX_article_dateprevue" ON "article" ("dateprevue");
     
    -- Création de la table utilisateur
    CREATE TABLE "utilisateur" (
        "IDutilisateur" NUMERIC(19,0)  PRIMARY KEY ,
        "user" VARCHAR(10)  NOT NULL  UNIQUE ,
        "password" VARCHAR(12)  NOT NULL ,
        "name" VARCHAR(30)  NOT NULL  UNIQUE ,
        "qualite" SMALLINT  NOT NULL ,
        "present" BIT  NOT NULL );
    CREATE INDEX "WDIDX_utilisateur_qualite" ON "utilisateur" ("qualite");
    CREATE INDEX "WDIDX_utilisateur_present" ON "utilisateur" ("present");
     
    -- Création de la table utilisateur_article
    CREATE TABLE "utilisateur_article" (
        "IDarticle" NUMERIC(19,0)  NOT NULL ,
        "IDutilisateur" NUMERIC(19,0)  NOT NULL ,
        "datemodif" TIMESTAMP  NOT NULL ,
        "typeintervention" SMALLINT  NOT NULL );
    CREATE INDEX "WDIDX_utilisateur_article_IDarticle" ON "utilisateur_article" ("IDarticle");
    CREATE INDEX "WDIDX_utilisateur_article_IDutilisateur" ON "utilisateur_article" ("IDutilisateur");
    CREATE INDEX "WDIDX_utilisateur_article_datemodif" ON "utilisateur_article" ("datemodif");
    CREATE INDEX "WDIDX_utilisateur_article_typeintervention" ON "utilisateur_article" ("typeintervention");
    CREATE INDEX "WDIDX_utilisateur_article_IDutilisateur_IDarticle1" ON "utilisateur_article" ("IDutilisateur","IDarticle");
    -- Contraintes d'intégrité
    ALTER TABLE "utilisateur_article" ADD FOREIGN KEY ("IDutilisateur") REFERENCES "utilisateur" ("IDutilisateur");
    ALTER TABLE "utilisateur_article" ADD FOREIGN KEY ("IDarticle") REFERENCES "article" ("IDarticle");
    Ceci est le code de création de mes tables HFSQL.
    Je souhaiterais avoir une requête à lire dans une table de telle sort à ce que ça ne m'affiche que la dernière intervention sur chaque article.
    La liste des utilisateurs est de la sorte.

    IdUtilisateur user password name qualite present
    2 bertrand 123 Bertrand Parrain 1 1
    3 Renard 123 François Fox 3 1
    4 Park 123 Anis Smith 3 1
    5 Mapping 123 Louise Carte 5 0
    6 Capsys 123 Arnaud Suisse 4 1

    Liste des articles

    Idarticle titre nompassage dateprevue page artsigne
    1 lre titre le passage 20210902 4 0
    2 Autre titre autre pass 20210902 24 0

    La table utilisateur_article

    IDarticle IDutilisateur datemodif typeintervention
    1 3 20210806000000000 1
    1 2 20210806120000000 2
    2 2 20210806110000000 1

    A chaque création/modification d'un article, je remplis la table utilisateur_article de sorte à ce que IDarticle soit l'ID de l'article concerné, IDutilisateur l'ID de l'utilisateur qui a fait la création/modification, datemodif la date heure d'intervention et typeintervention 1 pour modification 2 pour modification...
    Mon problème c'est d'obtenir une liste qui ne contienne que les articles avec uniquement la dernière intervention.

    J'espère avoir été clair.
    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 171
    Points : 9 662
    Points
    9 662
    Par défaut
    Voici une première requete , qui donne pour chaque article, la date la plus récente.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select ua.idarticle , max ( datemodif )  as date0
    from utilisateur_article  group by ua.idarticle
    Et du coup, voici une requête qui correspond à ton besoin

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with x as (
    select ua.idarticle , max ( datemodif )  as date0
    from utilisateur_article  group by ua.idarticle
    )
    select  x.idarticle , a.titre, u.user , x.date0
    from x, utilisateur_article ua, article a , utilisateur u
    where ua.idarticle = x.idarticle and ua.datemodif = x.date0
    and a.idarticle = x.idarticle
    and u.idutilisateur = ua.idutilisateur

    Ca marche à une condition, c'est si il n'y a pas de doublon. Si pour un article et une date, tu peux avoir 2 lignes, alors il faut voir...

  3. #3
    Membre éprouvé
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Points : 915
    Points
    915
    Par défaut
    Bonjour,
    Merci Winjerome pour la mise en page, je ne savais pas comment faire.
    Merci tcb92, sous windev, with n'est pas reconnu..

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 171
    Points : 9 662
    Points
    9 662
    Par défaut
    Ah ?
    Alors comme ça :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    select  x.idarticle , a.titre, u.user , x.date0
    from
      (
      select ua.idarticle , max ( datemodif )  as date0
      from utilisateur_article  group by ua.idarticle
      )
     x, 
    utilisateur_article ua, article a , utilisateur u
    where ua.idarticle = x.idarticle and ua.datemodif = x.date0
    and a.idarticle = x.idarticle
    and u.idutilisateur = ua.idutilisateur

  5. #5
    Membre éprouvé
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Points : 915
    Points
    915
    Par défaut
    Bonjour,
    Merci ça a l'air de répondre à mes attentes. Je fais plus de tests.

Discussions similaires

  1. Select sur une table intermédiaire
    Par Okena dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/07/2008, 14h14
  2. [Droits] INSERT et SELECT sur une table temporaire
    Par Bisûnûrs dans le forum Administration
    Réponses: 2
    Dernier message: 19/06/2008, 09h01
  3. Les résultats d'un Select sur une table
    Par naznaz dans le forum Bases de données
    Réponses: 1
    Dernier message: 04/11/2007, 12h58
  4. Réponses: 6
    Dernier message: 08/02/2007, 15h41
  5. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 09h42

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