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 :

Calcul de durée entre plusieurs enregistrements dans une même table [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur Automatisme Informatique Industrielle
    Inscrit en
    Octobre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Automatisme Informatique Industrielle

    Informations forums :
    Inscription : Octobre 2014
    Messages : 12
    Points : 13
    Points
    13
    Par défaut Calcul de durée entre plusieurs enregistrements dans une même table
    Bonjour à tous,

    Je fais appelle à votre aide car je rencontre actuellement un problème.

    J'ai une table qui enregistre toutes les alarmes d'une machine (Apparition et disparition).

    Exemple :

    DH / NOM / Etat

    20141010 10:02:49 / Alarme 1 / DEFAUT
    20141010 10:03:39 / Alarme 1 / NORMAL
    20141010 10:05:49 / Alarme 1 / DEFAUT
    20141010 10:06:09 / Alarme 1 / NORMAL
    20141010 12:33:19 / Alarme 1 / DEFAUT
    20141010 12:33:29 / Alarme 1 / NORMAL

    Ce que je voudrais faire, c'est calculer le temps totale que cette alarme à pu durer. En gros, l'opération à effectuer est :
    DH(NORMAL) - DH(Défaut) et ce pour chaque enregistrement de la table

    Comment puis-je réaliser ce calcul dans SQL ?

    Je ne sais pas si je suis très clair mais n'hésitez pas à me demander des explications si vous ne comprenez pas tout

    Merci pour votre aide

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    si on suppose une alternance des états (sans autres données au "milieu"), alors vous pouvez faire comme ceci :

    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
    18
    19
    20
    21
    22
    23
     
     
    ;WITH CTE AS (
    	SELECT 
    			DH
    		,	Nom
    		,	Etat
    		,	ROW_NUMBER() OVER(PARTITION BY Nom ORDER BY DH) AS Rn
    	FROM LaTable
    ), Duree AS(
    	SELECT 
    			DH
    		,	Nom
    		,	Etat
    		,	CASE WHEN rn%2 = 1 
    				THEN MAX(CASE WHEN rn%2 = 0 THEN DH END) OVER(PARTITION BY Nom, (rn-1)/2)
    				ELSE MAX(CASE WHEN rn%2 = 1 THEN DH END) OVER(PARTITION BY Nom, rn/2)
    			END AS DHSuiv
    	FROM CTE
    )
    SELECT DH, nom, DATEDIFF(second, DH, DHSuiv)
    FROM Duree
    WHERE Etat = 'DEFAUT'

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur Automatisme Informatique Industrielle
    Inscrit en
    Octobre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Automatisme Informatique Industrielle

    Informations forums :
    Inscription : Octobre 2014
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Bonjour aieeeuuuuu,

    Merci pour ta réponse qui fonctionne à merveille. Je vais pouvoir l'intégrer dans mes autres traitement de la table.

    Encore merci ça me retire une grosse épine du pied !!

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

Discussions similaires

  1. [MySQL] modifier le début de deux champs dans plusieurs enregistrements d'une même table
    Par corbin dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/04/2011, 09h40
  2. Copier un enregistrement dans une même table
    Par slammer dans le forum Langage SQL
    Réponses: 11
    Dernier message: 04/05/2010, 23h17
  3. conflit entre plusieurs scripts dans une même page
    Par lebenou13 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 11/11/2009, 15h17
  4. Réponses: 4
    Dernier message: 21/11/2007, 12h19
  5. [Requête] plusieurs champs dans une même table ayants la même source
    Par Christophe93250 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2006, 16h18

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