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

Développement SQL Server Discussion :

Recherche de données avec un numéro antérieur


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Médecin Département d'Information Médicale (DIM)
    Inscrit en
    Janvier 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Médecin Département d'Information Médicale (DIM)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2009
    Messages : 115
    Points : 60
    Points
    60
    Par défaut Recherche de données avec un numéro antérieur
    Bonjour

    Soit une table de séjours avec un ID_séjour = PK et un ID_Personne

    J'ai n personnes qui ont eu un séjour antérieur d'une liste de ID_SEJOURS (par ex 0001, 00058, 0008975 etc, peu importe)

    Je voudrais savoir quelle est le dernier ID_SEJOUR des ID_PERSONNE ayant eu un ID_SEJOUR de la liste connue précédente , et quel est ce dernier ID_SEJOUR pour chacune des ID_Personne

    merci

    Ma Table simplifiée

    ID_SEJOUR
    ID_PERSONNE
    DATE
    Etc.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Si j'ai bien compris .. la solution est la suivante:

    Citation Envoyé par Dr_No Voir le message
    ..Je voudrais savoir quelle est le dernier ID_SEJOUR des ID_PERSONNE ayant eu un ID_SEJOUR de la liste connue précédente
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MAX(ID_SEJOUR) AS LAST_SEJOUR_IN_LIST
    FROM dbo.SEJOUR
    WHERE ID_SEJOUR in (0001, 00058, 0008975,....)
    Citation Envoyé par Dr_No Voir le message
    ... et quel est ce dernier ID_SEJOUR pour chacune des ID_Personne
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ID_PERSONNE, MAX(ID_SEJOUR)  AS LAST_SEJOUR_PERSONNE_IN_LIST 
    FROM dbo.SEJOUR
    WHERE ID_SEJOUR IN (0001, 00058, 0008975,....) 
    GROUP BY ID_PERSONNE 
    ORDER BY ID_PERSONNE

    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  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 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
    Mieux vaut utiliser un ROW_NUMBER...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH sejour AS 
    (
    SELECT ID_PERSONNE, ID_SEJOUR,
           ROW_NUMBER() OVER(PARTITION BY ID_PERSONNE 
                             ORDER BY DATE_SEJOUR DESC) AS NUM
    FROM   dbo.SEJOUR
    )
    SELECT sejour_actuel.*, sejour_précédent.*
    FROM   sejour AS sejour_actuel
           INNER JOIN sejour AS sejour_précédent
                 ON sejour_actuel.ID_PERSONNE = sejour_précédent.ID_PERSONNE
                    AND sejour_actuel.NUM = sejour_précédent.NUM - 1;
    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
    Membre du Club
    Homme Profil pro
    Médecin Département d'Information Médicale (DIM)
    Inscrit en
    Janvier 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Médecin Département d'Information Médicale (DIM)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2009
    Messages : 115
    Points : 60
    Points
    60
    Par défaut
    Merci de vos réponses

    En fait j'ai mal formulé ma demande

    J'ai des une table des séjours avec un identifiant unique à chaque séjour
    On a bien dans cette table la clef Etrangere d'une Table Personnes, et les requêtes proposées me trouvent effectivement les ID_Personne

    Ce que je veux en fait c'est le dernier numéro de séjour (et non pas le dernier numéro de personnes) pour les numéros de séjour passés d'une liste (autrement dit, quel est le dernier séjour de ceux qui ont eu un séjour précédent)

    je présume que je dois d'abord trouver les personnes qui ont eu un des séjours de cette liste puis avec une jointure retrouver les derniers numéros de séjours de ces personnes; ou bien y a t'il un moyen de faire le tout dans la même requête


    merci

  5. #5
    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
    C'est exactement ce que fais la requête donnée....
    Avez-vous pris la peine de la lancer ?

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

  6. #6
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Je crois que j’ai compris ce que vous voulez obtenir comme résultat (enfin je l’espère !).

    Dernier ID_SEJOUR des personnes (Toute personne confondue) ayant déjà séjournée dans le liste des ID_SEJOUR)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT MAX(SEJOUR.ID_SEJOUR) 
       FROM SEJOUR 
       WHERE EXISTS ( SELECT 1 
                              FROM SEJOUR  AS SEJOUR_PRECEDENT 
    			  WHERE   SEJOUR_PRECEDENT.ID_SEJOUR in (0001, 00058, 0008975, ...)  
    			  AND     SEJOUR_PRECEDENT.ID_PERSONNE = SEJOUR.ID_PERSONNE )

    Dernier ID_SEJOUR pour chacune des personnes (personne par personne séparément) ayant déjà séjournée dans la liste des ID_SEJOUR
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT ID_PERSONNE, MAX(ID_SEJOUR)  AS LAST_SEJOUR_PERSONNE_IN_LIST 
    FROM dbo.SEJOUR
    WHERE EXISTS ( SELECT 1 
                           FROM dbo.SEJOUR  AS SEJOUR_PRECEDENT 
    		       WHERE SEJOUR_PRECEDENT.ID_SEJOUR in (0001, 00058, 0008975, ...)  
    		      AND   SEJOUR_PRECEDENT.ID_PERSONNE = SEJOUR.ID_PERSONNE ) 
    GROUP BY ID_PERSONNE 
    ORDER BY ID_PERSONNE

    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  7. #7
    Membre du Club
    Homme Profil pro
    Médecin Département d'Information Médicale (DIM)
    Inscrit en
    Janvier 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Médecin Département d'Information Médicale (DIM)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2009
    Messages : 115
    Points : 60
    Points
    60
    Par défaut
    Oups

    Je n'avais vu que la première requête que j'avais forcément déjà faite; pas la seconde qui correspond, bien évidemment

    C'est la fonction WHERE EXISTS (...) qui manquait à ma modeste grammaire SQL

    Merci beaucoup

  8. #8
    Membre du Club
    Homme Profil pro
    Médecin Département d'Information Médicale (DIM)
    Inscrit en
    Janvier 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Médecin Département d'Information Médicale (DIM)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2009
    Messages : 115
    Points : 60
    Points
    60
    Par défaut
    et re-Oups décidemment je ne suis pas enforme aujourd'hui, je n'avais pas vu non plus celle avec ROW_NUMBER


    Et tout fonctionne


    Merci encore et mes excuses pour ce manque de concentration

    Cordialement

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

Discussions similaires

  1. [XL-2010] Recherche de données avec Recherche V
    Par graphikris dans le forum Excel
    Réponses: 5
    Dernier message: 30/05/2014, 18h39
  2. Recherche de données avec un critère spécifique
    Par TERRIBLE dans le forum Deski
    Réponses: 1
    Dernier message: 06/08/2010, 13h48
  3. Rechercher une image avec son numéro d'enregistrement
    Par b.bilel dans le forum Bases de données
    Réponses: 7
    Dernier message: 11/05/2008, 22h00
  4. [Debutant] Recherche sur table avec donnée incomplète
    Par dahu17 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/06/2007, 17h00
  5. Réponses: 2
    Dernier message: 10/11/2005, 16h59

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