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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top