タイムスタンプ列(タイムスタンプという名前の標準のOracle DATEデータ型)を持つ表があります。レコードは約4-11分離れており、毎時間約7〜8件のレコードがあり、それらにパターンがあるかどうかを判断しようとしています。レコード間の時間の差
各レコードとその前のレコードの後に記録された分数を簡単に確認する方法はありますか?
おかげで、 AndyDan
タイムスタンプ列(タイムスタンプという名前の標準のOracle DATEデータ型)を持つ表があります。レコードは約4-11分離れており、毎時間約7〜8件のレコードがあり、それらにパターンがあるかどうかを判断しようとしています。レコード間の時間の差
各レコードとその前のレコードの後に記録された分数を簡単に確認する方法はありますか?
おかげで、 AndyDan
これは、自己に必要とせずに、前のタイムスタンプ値を取得するためにLAG functionを使用して、Oracle 9iの+は、参加している:
SELECT t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp) AS diff
FROM YOUR_TABLE t
...しかし、全体の数字は、結果での違いを日数を表すため、 24時間未満の場合は分数になります。また、LAGは、以前の値がない場合はNULLを返します。これは、OUTER JOINを使用した場合と同じです。
SELECT ROUND((t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp)) *1440) AS diff_in_minutes
FROM YOUR_TABLE t
レコードがシーケンシャルIDをお持ちの場合は、自己を行うことができますが、このように参加:
SELECT t2.*, t2.timestamp - t1.timestamp AS timediff
FROM foo t1 inner join foo.t2 on t1.id = t2.id-1
おそらく、最初と最後のレコードを処理するために、これを微調整する必要があるだろう、それが基本です。
残念ながら、順次またはそうでなければ、IDは、ありません:、分を参照ROUND関数を使用し
。レコードをソートする唯一の信頼できる方法は、タイムスタンプによるものです。しかし、ありがとう。 – AndyDan
たとえあったとしても、それらが常にシーケンシャルであるという保証はありません - タイムスタンプ値はバックデートすることができますが、id値は最新です。 –
完璧! SELECT句を "SELECT t。*、(t.timestamp - LAG(t.timestamp)OVER(ORDER BY t.timestamp))* 1440 ASの差異"に変更してレコードに差分を加えた数を加え、それは私に必要なものを正確に教えてくれます。ありがとう!!! – AndyDan