2010-11-29 5 views
2

J'ai une table qui possède (entre autres) une colonne d'horodatage (appelée timestamp, c'est un type de données Oracle DATE standard). Les enregistrements sont à environ 4 à 11 minutes d'intervalle, soit environ 7 ou 8 enregistrements toutes les heures, et j'essaie de déterminer s'il y a un modèle pour eux.Différence de temps entre les enregistrements

Existe-t-il un moyen facile de voir chaque enregistrement, et le nombre de minutes que cet enregistrement a eu lieu après l'enregistrement précédent?

Merci, AndyDan

Répondre

8

C'est Oracle 9i +, en utilisant la LAG function pour obtenir la valeur d'horodatage précédent sans avoir besoin de moi rejoindre:

SELECT t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp) AS diff 
    FROM YOUR_TABLE t 

... mais parce que des nombres entiers représentent le nombre de jours dans le résultat, une différence de moins de 24 heures sera une fraction. En outre, le LAG renverra NULL s'il n'y a pas de valeur antérieure - comme si vous aviez utilisé un OUTER JOIN.

Pour voir minutes, utilisez la fonction ROND:

SELECT ROUND((t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp)) *1440) AS diff_in_minutes 
    FROM YOUR_TABLE t 
+0

Parfait! J'ai changé la clause SELECT pour "SELECT t. *, (T.timestamp - LAG (t.timestamp) PLUS (ORDER BY t.timestamp)) * 1440 AS différence" pour obtenir l'enregistrement plus le nombre de minutes comme la différence, et ça me donne exactement ce dont j'ai besoin. Merci!!! – AndyDan

1

Si les enregistrements ont ids séquentiels que vous pourriez faire une jointure réflexive comme ceci:

SELECT t2.*, t2.timestamp - t1.timestamp AS timediff 
FROM foo t1 inner join foo.t2 on t1.id = t2.id-1 

Vous auriez probablement besoin de modifier cela pour gérer les enregistrements premier et dernier, mais c'est les bases.

+0

Malheureusement, il n'y a pas d'identité, séquentielle ou autre. Le seul moyen fiable de trier les enregistrements est l'horodatage. Merci quand même. – AndyDan

+0

Même s'il y en avait, il n'y a aucune garantie qu'ils seront toujours séquentiels - une valeur d'horodatage pourrait être antidatée, mais la valeur d'identifiant est la plus récente. –

Questions connexes