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 :

[SQLServer 2005]Requête avec donnée utilisant la ligne précédente


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2006
    Messages : 735
    Points : 544
    Points
    544
    Par défaut [SQLServer 2005]Requête avec donnée utilisant la ligne précédente
    Bonjour à tou(te)s,

    J'ai besoin de notifier un changement de valeur dans le résultat de ma requête. L'exemple sera surement plus explicite que mon blabla :
    Ligne 1 : Toto Titi 123 01/01/2000 13:47:08 1
    Ligne 2 : Toto Titi 572 01/01/2000 13:47:08 0
    Ligne 3 : Tutu Titi 496 01/01/2000 13:47:18 1
    Ligne 4 : Tutu Titi 185 01/01/2000 13:47:28 0
    Ligne 5 : Tutu Titi 789 01/01/2000 13:47:38 0
    Lorsque la valeur Toto passe à Tutu, je souhaite le notifier par un 1 dans la dernière colonne par exemple. Je voudrais pouvoir faire, en gros :
    select Colonne1, Colonne2, Colonne3, Heure, Si Colonne1Precedente<>Colonne1Actuelle alors 1 sinon 0
    C'est possible ca sous SQL Server (Transact SQL donc) ?

    Merci d'avance,

    EDIt : Mise à jour des heures affichées : une mesure toute les 10 secondes
    Mindiell
    "Souvent, femme barrit" - Elephant man

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    août 2008
    Messages
    857
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 857
    Points : 958
    Points
    958
    Par défaut
    Bonjour,

    Qu'est ce qui définit l'ordre de vos lignes? Je vois qu'elles ont toutes exactement la même date.

  3. #3
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2006
    Messages : 735
    Points : 544
    Points
    544
    Par défaut
    Euh, c'est que j'ai écrit ca comme ca... :o)
    En réalité, elles ont un décalage de dix secondes à chaque fois (on prend les mesures une fois toutes les 10 secondes).
    Mindiell
    "Souvent, femme barrit" - Elephant man

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    août 2008
    Messages
    857
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 857
    Points : 958
    Points
    958
    Par défaut
    Bonjour,

    Je crois que SQL Server 2005 ne supporte pas les fonction lag() et lead(), mais vous pouvez utiliser row_number() :
    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
     
    WITH nom_cte 
    AS
    (
     SELECT colonne1, colonne2, colonne3, heure,
            row_number() over (order by heure asc) as position
     FROM nom_table
    )
    SELECT t.*, 
           CASE WHEN t_prec.colonne1 IS NULL OR t_prec.colonne1 <> t.colonne1 
                     THEN 1 
                ELSE 0
           END AS chgt
    FROM nom_cte t 
    LEFT JOIN nom_cte t_prec
         ON t.position = t_prec.position+1 
    ORDER BY t.heure

  5. #5
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2006
    Messages : 735
    Points : 544
    Points
    544
    Par défaut
    Merci beaucoup !

    Finalement je me suis débrouillé sans même un row_number, mais grâce à toi quand même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT A.*,
    CASE WHEN A.colonne1 <> B.colonne1 then 1 else 0 as chgt
    FROM (
       SELECT colonne1, colonne2, colonne3, heure
       FROM nom_table
    ) as A
    INNER JOIN (
       SELECT colonne1, colonne2, colonne3, heure
       FROM nom_table
    ) as B
    ON A.heure = dateadd (ss, 10, B.heure)
    ORDER BY A.Heure
    Mindiell
    "Souvent, femme barrit" - Elephant man

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

Discussions similaires

  1. Utiliser la ligne précédente
    Par jnacef dans le forum R
    Réponses: 0
    Dernier message: 20/02/2015, 13h15
  2. [XL-2007] Insertion ligne avec copie certaines cellules ligne précédente
    Par John Parker dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 23/08/2013, 17h42
  3. Tri de requêtes avec une utilisation de Awk
    Par isagarran dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 04/07/2010, 23h17
  4. Réponses: 4
    Dernier message: 23/12/2009, 22h29
  5. [vb 2005]requête avec 2 paramètres
    Par isi241 dans le forum Windows Forms
    Réponses: 15
    Dernier message: 27/08/2008, 20h25

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