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 :

Récupérer l'enregistrement précédent


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Récupérer l'enregistrement précédent
    Bonjour,

    J’ai une requête qui me récupère plusieurs dates de séjour d’un patient à l'hôpital et je veux obtenir les dates précédentes à chacune comme l’exemple ci_dessous.

    Je suis sous sqlserver 2008.
    EXP :
    no de malade date d'entree Precedent Date
    000000000001 16/07/92
    000000000001 26/01/95 16/07/92
    000000000001 28/08/97 26/01/95
    000000000001 05/10/98 28/08/97
    000000000001 08/02/99 05/10/98
    000000000001 20/09/99 08/02/99

    Merci par 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
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Il n'y a pas d'enregistrement dans une base de données. Il y a des tables et des lignes. À lire : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2

    D'autre part, merci de respecter les règles du forum en fournissant le DDL de vos tables et un jeu d'essais sous forme INSERT.. A lire : http://www.developpez.net/forums/d96...vement-poster/

    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 émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Par défaut
    Grâce aux CTE, tu devrais pouvoir trouver ton bonheur. Regarde un example trouvé au hasard sur internet http://www.kodyaz.com/articles/sql-s...w-in-tsql.aspx

  4. #4
    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 darkelend !
    l'expression CTE à vraiment répondu à mon besoin .

  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
    j'essaye dinserer e resultat de cette commande dans une table , mais je n'arrive pas , quelqu'un peut-il m'aider


    insert into table
    WITH CTE AS ( SELECT
    RN = ROW_NUMBER() OVER (ORDER by [SEJOUR_DATE_DEBUT]),[SEJOUR_DATE_DEBUT] FROM [DWH_TDS].[dbo].[T_SEJOUR] )
    SELECT
    [Previous Row].[SEJOUR_DATE_DEBUT] AS 'DATE SEJOUR PRECEDENTE'
    FROM CTE [Current Row]
    LEFT JOIN CTE [Previous Row] ON
    [Previous Row].RN=[Current Row].RN-1

    j'ai l'erreur suivante

    Msg*102, Niveau*15, État*1, Ligne*2
    Syntaxe incorrecte vers 'CTE'.

    merci par avance

  6. #6
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Par défaut
    Il faut faire l'insert après le with.
    Quelque chose dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WITH CTE AS (select .....) insert into table(mescolonnes) select mescolonnes from CTE

  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 pour retour mais j'execute la requete , j'ai l'erreur suivante

    (1000*ligne(s) affectée(s))
    Msg*208, Niveau*16, État*1, Ligne*9
    Nom d'objet 'CTE' non valide.
    voici ma requete :
    "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
         WITH CTE AS (SELECT 
          RN = ROW_NUMBER() OVER (ORDER by [SEJOUR_DATE_DEBUT],[SEJOUR_DATE_FIN])
          ,[SEJOUR_DATE_DEBUT]
          , [SEJOUR_DATE_FIN]  FROM [DWH_TDS].[dbo].[T_SEJOUR]
          )   
              SELECT 
              [Previous Row].[SEJOUR_DATE_DEBUT] AS 'DATE SEJOUR PRECEDENTE',
              [Previous Row].[SEJOUR_DATE_FIN]  AS 'DATE SEJOUR FIN PRECEDENT '
     
          FROM CTE [Current Row] 
          LEFT JOIN CTE [Previous Row] ON 
          [Previous Row].RN=[Current Row].RN -1   INSERT INTO dbo.T_SEJOUR_PRECEDENT_DATE  SELECT  [Previous Row].[SEJOUR_DATE_DEBUT], [Previous Row].[SEJOUR_DATE_FIN] from CTE
    merci d'avance

  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
    Si je me réfère à la page de la msdn pour les CTE, ne manque-t-il pas une partie à la déclaration ?

    Voici la page msdn correspondante : http://msdn.microsoft.com/en-us/library/ms175972.aspx

    Griftou.

  9. #9
    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
    Avant de penser CTE, merci de considerer la version de sql server.
    Quelle est la version de sql serveur que vous utilisez ?

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

Discussions similaires

  1. UPDATE SQL récupérer enregistrement précédent
    Par ragemind dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/08/2011, 13h21
  2. Réponses: 1
    Dernier message: 24/04/2010, 18h36
  3. Réponses: 31
    Dernier message: 19/04/2010, 20h37
  4. Réponses: 13
    Dernier message: 16/11/2007, 10h05
  5. Récupérer dernier enregistrement d'une table?
    Par Invité dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 19/01/2004, 11h38

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