Differenza di tempo tra i record
-
29-09-2019 - |
Domanda
Ho una tabella che ha (tra gli altri) una colonna timestamp (chiamato timestamp, è un tipo di dati Oracle DATA standard). I record sono circa 4-11 minuti a parte, circa 7 o 8 record ogni ora, e sto cercando di determinare se c'è qualche motivo per loro.
C'è un modo semplice per vedere ogni record, e il numero di minuti che registrano si è verificato dopo il precedente record?
Grazie, AndyDan
Soluzione
Questa è Oracle 9i +, utilizzando il funzione GAL per ottenere il valore timestamp precedente senza la necessità di auto join:
SELECT t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp) AS diff
FROM YOUR_TABLE t
... ma perché i numeri interi rappresentano il numero di giorni nel risultato, una differenza di meno di 24 ore sarà una frazione. Inoltre, il GAL restituirà NULL se non c'è valore non prima -. Come se aver usato un outer join
Per vedere minuti, utilizzare la funzione ROUND:
SELECT ROUND((t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp)) *1440) AS diff_in_minutes
FROM YOUR_TABLE t
Altri suggerimenti
Se i record hanno id sequenziale di che si potrebbe fare un self join come questo:
SELECT t2.*, t2.timestamp - t1.timestamp AS timediff
FROM foo t1 inner join foo.t2 on t1.id = t2.id-1
si sarebbe probabilmente bisogno di modificare questo per gestire il primo e l'ultimo record, ma questo è i principi fondamentali.