j'ai une table d'événements avec les colonnes suivantes:Ajout d'une donnée de référence à la colonne de table à partir de différentes lignes de la table
-
séquence
- (int)
- DeviceID (varchar (8))
- de TIME_START (datetime)
- DeviceState (smallint)
- TIME_END (datetime)
Toutes les colonnes sauf time_end sont remplies avec les données (ma colonne time_end actuelle est NULL à travers la table). Ce que je dois faire est de remplir la colonne time_end avec les données de fermeture d'événement. C'est en fait le moment où un nouvel événement du même périphérique s'est produit. Voici un exemple modèle de données comment il devrait fonctionner à la fin:
sequence DeviceID time_start DeviceState time_end
--------------------------------------------------------------------------------------
1 000012A7 2010-10-31 12:00 14 2010-10-31 12:10
2 000012A7 2010-10-31 12:10 18 2010-10-31 12:33
3 000012A8 2010-10-31 12:20 16 2010-10-31 13:01
4 000012A7 2010-10-31 12:33 13 2010-10-31 12:47
5 000012A7 2010-10-31 12:47 18 2010-10-31 13:20
6 000012A8 2010-10-31 13:01 20 2010-10-31 13:23
7 000012A7 2010-10-31 13:20 05 2010-10-31 14:12
8 000012A8 2010-10-31 13:23 32 2010-10-31 14:15
9 000012A7 2010-10-31 14:12 12
10 000012A8 2010-10-31 14:15 35
L'idée est que pour chaque enregistrement dans le tableau que je dois sélectionner un enregistrement sur la séquence plus élevée pour le dispositif spécifique et mettre à jour le TIME_END avec les données time_start de cet enregistrement de niveau supérieur. Avec ceci, je serai en mesure de suivre la période de chaque événement.
Je pensais à faire cela avec un appel de fonction, mais j'ai deux principales difficultés: 1. obtenir les données, par exemple: séquence = 2 et la mise à jour de la séquence TIME_END = 1 2. la création d'une fonction qui sera Continuez en même temps que de nouveaux enregistrements sont ajoutés dans la table
Je suis assez nouveau dans le SQL et je suis complètement perdu sur ce qui est possible. Sur la base de mes connaissances, je devrais utiliser la fonction qui référencerait les données ensemble, mais mes connaissances actuelles me limitent en faisant cela.
J'espère que quelqu'un pourrait me fournir quelques conseils dans quelle direction aller et me fournir des commentaires si je suis sur la bonne voie ou non. Tout article de support serait très apprécié.
Pour quelle version de SQL Server? Si time_end sera toujours le précédent time_start, pourquoi l'enregistrer du tout - ce sont des données redondantes que vous pourriez obtenir en sélectionnant le time_start pour un deviceid et un ordre avec la valeur time_start ... –
Pour ajouter à ce que les poneys OMG suggèrent si c'est un Pour éviter d'écrire cette logique encore et encore parce que vous prévoyez de l'utiliser fréquemment, vous pourriez créer une vue. –
@OMG Ponies: SQL Server 2008 – Mark