2010-08-12 4 views
2

J'ai une table Oracle 10g qui contient un nombre d'enregistrements de journal. Cette table recueille des données à partir d'un périphérique d'enregistrement environnemental qui crée un enregistrement de journal toutes les 15 secondes lorsqu'il est en cours d'exécution.Comment puis-je agréger le nombre de secondes dans un résultat de requête?

Je souhaite ajouter toutes les secondes à partir des dates de lecture des entrées du fichier journal afin de garantir que le journal s'exécute> 24 heures (84 600 secondes). Les données ressemble à ceci:

ID  READING_DATE 
286294 8/4/2010 1:03:30 PM 
286295 8/4/2010 1:03:45 PM 
286296 8/4/2010 1:04:00 PM 
286297 8/4/2010 1:04:15 PM 
286298 8/4/2010 1:04:30 PM 
286299 8/4/2010 1:04:45 PM 
286300 8/4/2010 1:05:00 PM 

Je ne peux pas interroger la (date de fin - date de début), car l'appareil peut ne pas fonctionner 24 heures consécutives. Il peut durer 24 heures au total sur une période de 90 jours.

Ce que je veux faire est d'écrire une requête à exécuter par la base de données qui ajoutent chaque intervalle de 15 secondes au dernier pour voir si j'ai un résultat qui est supérieur à> 84600.

Tous/toutes les réponses sont appréciés! Merci à l'avance,

+0

Pas besoin de signer car chaque Q est auto-signé. Aussi inutile de répéter les balises dans le titre de votre question puisque les balises sont toujours visibles. Bonne question cependant. –

+0

Merci pour les conseils. – Griff

Répondre

3

Le nombre de secondes que l'appareil a été en cours d'exécution est d'environ:

SELECT COUNT(*) * 15 
FROM your_table 
+0

+1: L'OP a vraiment surchargé celui-ci –

+0

Malheureusement, il existe un certain nombre de dispositifs différents qui recueillent ce type de données, et ils échantillonnent tous à des intervalles différents. Je n'ai aucune connaissance préalable de la fréquence d'échantillonnage pour chaque type d'appareil. – Griff

+0

@Griff: Vous pourriez probablement deviner la fréquence d'échantillonnage en regardant les deux premières lignes et en calculant la différence. Cela pourrait donner le mauvais résultat dans certains cas, alors soyez prudent. Une autre alternative consiste à trouver la différence minimale entre deux rangées consécutives et à l'utiliser comme taux d'échantillonnage. –

0

En supposant que vous avez plusieurs appareils connectés à cette table et que vous voulez énumérer tous les appareils qui ont été en cours d'exécution pour> Un jour.

SELECT device_id 
FROM log_table 
GROUP BY device_id 
HAVING MAX(reading_date) - MIN(reading_date) > 1.0 
Questions connexes