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 :

Besoin d'aide pour une requete


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Par défaut Besoin d'aide pour une requete
    Bonjour,

    j'ai une table d'historique à remplir qui contient le numero du malade , sa date de debut de création et la date de fin de création .

    un malade peut avoir plusieurs dates de débuts , je dois calculer la date de fin pour chaque ligne pour obtenir le resultat suivant, la première date de fin est la dernière date de début pour un malade.

    exp :

    NUM_PATIENT DATE DEBUT DATE FIN
    00000011 1997-03-03 2010-05-18
    00000011 2010-05-18 2099-12-31
    je fais la requete suivante qui ne me donne pas le résultat attendu.

    SELECT A.NUM_PATIENT ,A.DATE DEBUT,ISNULL(MAX(B.DATE DEBUT),'2099-12-31') AS 'DATE FIN'
    From PATIENT A,PATIENT B
    WHERE A.NUM PATIENT=B.NUM PATIENT and A.NUM PATIENT='00000011'
    GROUP BY A.NUM_PATIENT ,A.DATE DEBUT

    j'obtiens le résultat suivant :

    NUM_PATIENT DATE DEBUT DATE FIN
    00000011 1997-03-03 2010-05-18
    00000011 2010-05-18 2010-05-18

    la valeur de la date de fin de la deuxième ligne doit être '2099-12-31'
    merci pour votre aide

  2. #2
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Tu fais un max de la date de début...

    Ce ne serait pas plutôt de la date de fin ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Par défaut Aide pour requete
    Merci grifou ,

    Mais au départ la date de fin est à null , c'est à moi de les calculer à partir de la date de début .

    les valeurs que je donnes sont celles que je dois trouver.

    Merci par avance

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Ah ok, je pensais que l'exemple du début était un exemple des données de ta table...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Par défaut
    Avez vous une idée sur la manière de faire pour retrouver le résultat obtenu ?

    Merci par avance

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Quelle est la structure de la/les table/s où se trouvent les données sources ?

    EDIT :
    En attendant, voici ce à quoi j'arrive (il y a certainement plus élégant/performant comme une CTE récursive par exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select 
    		id_patient, 
    		debut, 
    		isnull((select 
    						top 1 debut 
    				from 
    						tblTestDVP b 
    				where 
    						b.debut > a.debut 
    				order by 
    						debut asc),'2099-12-31')
    from
    		dbo.tblTestDVP a
    Voici la structure de la table que j'ai utilisé (en me basant sur les infos disponibles) :
    Code : 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
    USE [test]
    GO
    /****** Object:  Table [dbo].[tblTestDVP]    Script Date: 05/07/2012 14:54:35 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[tblTestDVP](
    	[id] [int] IDENTITY(1,1) NOT NULL,
    	[id_patient] [int] NOT NULL,
    	[debut] [datetime] NOT NULL,
    	[fin] [datetime] NULL,
     CONSTRAINT [PK_tblTestDVP] PRIMARY KEY CLUSTERED 
    (
    	[id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    Et le jeu de données de test que j'y ai inséré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into dbo.tblTestDVP (id_patient, debut) values (1, '2012-01-01')
    insert into dbo.tblTestDVP (id_patient, debut) values (1, '2012-01-25')
    insert into dbo.tblTestDVP (id_patient, debut) values (1, '2012-02-01')
    insert into dbo.tblTestDVP (id_patient, debut) values (1, '2012-04-01')

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Par défaut
    Merci Griftou,

    j'ai testé ta requete elle fonctionne très bien sur votre exemple mais sur mes données, il ya un problème de type de données .

    mes dates sont avec des minutes et secondes

    ma table à la structre suivante

    num patient nvarchar(12) non null
    date debut datetime non null
    date fin datetime non null

    ci_joint le le resulat obtenu :
    Fichiers attachés Fichiers attachés

  8. #8
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Attention, je viens de remarquer que j'ai oublié de prendre en compte le numéro du patient dans la sous-requête !
    Veillez donc à adapter la requête en conséquence.

    Par contre, je ne vois pas ce qui cloche au niveau des types de données si ce n'est que je trouve bizarre que votre numéro de patient soit en nvarchar(12). Surtout avec l'exemple que vous avez donné.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Par défaut
    Merci Griftou ,

    ça marche , en ajoutant le num patient dans la condition .


    le type de données pour num patient est nvarchar(12) , mais l'exemple que j'ai donnée n'etait pas les vrai données.

    merci pour ton aide .

  10. #10
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Pouvez vous marquer resolu ce poste ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

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

Discussions similaires

  1. Besoin d'aide pour une requete
    Par fabris dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/04/2006, 20h15
  2. Besoin d'aide pour une requete SQL
    Par fabris dans le forum Requêtes
    Réponses: 6
    Dernier message: 10/04/2006, 20h27
  3. besoin d'aide pour une requete
    Par Pigoulou dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/02/2006, 20h34
  4. Besoin d'aide pour une requete
    Par Okhotsk dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/11/2005, 16h30
  5. Besoin d'aide pour une requete
    Par jnc dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/07/2005, 11h54

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