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 :

Req SQL Next/Previous ID


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2014
    Messages : 75
    Points : 63
    Points
    63
    Par défaut Req SQL Next/Previous ID
    Bonjour,

    J'aurais souhaité savoir comment faire pour récupérer l'id de la précédente entrée, ainsi que l'id de la suivante.

    Exemple :
    dans ma table j'ai 6 rows ... 2, 4, 6, 8, 13, 54

    J'aimerais savoir comment puis-je faire pour qu'à partir de l'id 8, je puisse récupérer les id 6 et 13.


    Merci d'avance.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    6 c'est le plus grand de ceux qui sont inférieurs à 8, 13 le plus petit de ceux qui sont supérieurs à 8...
    Reste à mettre ça en forme dans une requête

    Regarde du côté des fonctions LEAD et LAG
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2014
    Messages : 75
    Points : 63
    Points
    63
    Par défaut
    Oki merci pour l'info. Mais malheureusement les premiers tests me laisse très perplexe ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LAG(id_aricle, 8,0)  FROM tb_aricles
    'LAG' n'est pas une option nom de fonction intégrée reconnue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LEAD(id_aricle, 8,0)  FROM tb_aricles
    'LEAD' n'est pas une option nom de fonction intégrée reconnue.
    je suis sûr du SQL SERVER - Win 2k8 R2

  4. #4
    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
    Citation Envoyé par mGraph Voir le message
    Oki merci pour l'info. Mais malheureusement les premiers tests me laisse très perplexe ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LAG(id_aricle, 8,0)  FROM tb_aricles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LEAD(id_aricle, 8,0)  FROM tb_aricles
    je suis sûr du SQL SERVER - Win 2k8 R2
    Les 2 fonctions analytiques LEAD et LAG, suggérées adroitement par al1_24, ne sont disponibles qu'à partir de la version SQL Server 2012 et supérieures. Mais comme vous aviez omis lors de votre premier post de préciser la version de votre instance SQL Server, al1_24 n'est nullement comptable de votre perplexité !

    Sous SQL Server 2008 R2, vous pouvez obtenir un résultat équivalent en utilisant la CTE, comme le montre l'exemple qui suit :
    Code SQL : 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 (ORDER BY id_article) AS RowNumbrer
    		, id_article 
      FROM tb_article ) 
    SELECT T.id_article, T_Prec.id_article AS id_article_Prec  , T_Suiv.id_article AS id_article_Suiv
    FROM T 
    LEFT OUTER JOIN T AS T_Prec  
       ON T.RowNumbrer = T_Prec.RowNumbrer + 1 
    LEFT OUTER JOIN T AS T_Suiv  
      ON T.RowNumbrer = T_Suiv.RowNumbrer - 1 
    ORDER BY T.id_article

    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    id_article	id_article_Prec	id_article_Suiv
    2	NULL	4
    4	2	6
    6	4	8
    8	6	13
    13	8	54
    54	13	NULL
    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2014
    Messages : 75
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par hmira Voir le message
    [...] al1_24 n'est nullement comptable de votre perplexité !
    Ah aucun moment je n'ai été perplexe de la réponse al1_24 ! simplement des tests que j'ai effectué ...
    [...] les premiers tests me laisse très perplexe ...
    Enfin bon

    En tout cas votre code fonctionne à merveille, merci.

    Cependant j'aurais souhaité une petite explication sur le fonctionnement de base de With() ne connaissant pas cette fonction j'ai fais des recherches mais à la lecture de la doc msdn je me suis comme qui dirais noyé. lool.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 698
    Points : 586
    Points
    586
    Par défaut
    Depuis SQL2012

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LAG(id_aricle, 1) OVER () FROM tb_aricles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LEAD(id_aricle, 1) OVER ()  FROM tb_aricles

  7. #7
    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
    Citation Envoyé par mGraph Voir le message
    Ah aucun moment je n'ai été perplexe de la réponse al1_24 ! simplement des tests que j'ai effectué ...

    Enfin bon
    Mais, comme vos tests vous ont été suggérés par al1_24 ! cela sous entend, que le veuille ou non, que ce qu'il vous a suggéré ne fonctionnait pas, ce qui est dans l'absolu est faux. On ne va épiloguer sur le sujet.

    N'oubliez pas, toutefois, lors de vos prochains posts, de préciser la version de votre instance SQL Server (2000, 2005, 2008, 2008R2 2012, 2014 etc.. ), cela contribuera à ce vous ayez des réponses plus appropriées, du moins compatibles avec la version de votre instance SQL Server.


    Citation Envoyé par mGraph Voir le message
    En tout cas votre code fonctionne à merveille, merci.
    J'en suis ravi ! et on est là, après tout, pour s'entraider mutuellement dans un esprit philanthropique.

    Citation Envoyé par mGraph Voir le message
    Cependant j'aurais souhaité une petite explication sur le fonctionnement de base de With() ne connaissant pas cette fonction j'ai fais des recherches mais à la lecture de la doc msdn je me suis comme qui dirais noyé. lool.
    En ce qui concerne la CTE, je vous suggère vivement de commencer par lire l'excellent article (lien ci-dessous) réalisé par SQLPro
    http://sqlpro.developpez.com/cours/s...te-recursives/

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

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par mGraph Voir le message
    Ah aucun moment je n'ai été perplexe de la réponse al1_24 ! simplement des tests que j'ai effectué ...

    Enfin bon

    En tout cas votre code fonctionne à merveille, merci.

    Cependant j'aurais souhaité une petite explication sur le fonctionnement de base de With() ne connaissant pas cette fonction j'ai fais des recherches mais à la lecture de la doc msdn je me suis comme qui dirais noyé. lool.
    la première des choses serait de respecter la règle se postage :
    http://www.developpez.net/forums/d96...vement-poster/
    En particuluer nous indiquer systématiquement version et edition de SQL Serve !

    Ensuite WITH n'est pas une fonction et fait partie intégrante du langage SQL depuis 1999.. soit 15 ans... A quel moment avez vous appris le langage SQL ? En 1930 ??? ;-)

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

Discussions similaires

  1. Transformer une Req SQL en code VBA
    Par nomade333 dans le forum VBA Access
    Réponses: 7
    Dernier message: 12/09/2007, 03h53
  2. Réponses: 7
    Dernier message: 20/08/2007, 13h49
  3. Priorité de classement ds req. SQL
    Par jayan dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 03/11/2006, 12h13
  4. comment intérroger les Primary key par req SQL ?
    Par nanou9999 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/03/2006, 10h22
  5. Next & Previous
    Par bidson dans le forum XMLRAD
    Réponses: 13
    Dernier message: 01/05/2003, 09h35

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