Nous avons un tableau dans notre base de données dans lequel les différents systèmes rapportent avec l'horodatage et les valeurs. Cette table est appelée la table de données. (Je sais, je ne l'ai pas nommé.)Calcul des différences de dates entre les enregistrements
Donc, je suis chargé de parcourir et de trouver les différences de temps entre les rapports pour un système particulier.
Ne sachant pas comment d'autre pour aller à ce sujet, je crée une table temporaire,:
CREATE TABLE #Readings(
id INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
timestamp DATETIME
)
Puis-je insérer toutes les lectures d'un système particulier:
INSERT INTO #Readings (timestamp)
SELECT ReadingAt
FROM data
WHERE SenId = 3
ORDER BY ReadingAt
Enfin, je exécuter ma requête:
select r1.id, r1.timestamp, datediff(second, r1.timestamp, (select r2.timestamp
from #Readings r2 where r2.id = (r1.id - 1)))
from #Readings r1
where id > 1
mais ce retour:
101 2011-07-14 04:44:05.443 <null>
102 2011-07-14 04:46:05.443 -120
103 2011-07-14 04:48:05.447 -120
104 2011-07-14 04:50:05.447 -120
105 2011-07-14 04:52:05.447 -120
106 2011-07-14 04:54:05.45 -120
107 2011-07-14 04:56:05.45 -120
108 2011-07-14 04:58:05.45 -120
109 2011-07-14 05:00:05.45 -120
110 2011-07-14 05:02:05.453 -120
Je l'ai fait ce qui suit:
select r1.id, r1.timestamp, (select r2.timestamp from #Readings r2 where r2.id = (r1.id - 1))
from #Readings r1
where id > 1
qui retourne les dates exactes. Donc, je me demande comment je peux faire ça?
Merci.
Les résultats que vous avez regarder raisonnable pour moi - si vous voulez des valeurs positives, il suffit de changer l'ordre de la seconde et les troisièmes opérandes. Qu'avez-vous * espérer * obtenir? –
Les résultats sont toujours de 120 secondes quelle que soit la plage de temps. C'est pourquoi ils ne sont pas raisonnables. – Thom
Ce qui est réellement la bonne réponse. Oups. Merci de l'avoir signalé. – Thom