Calcola tempi Differenza tra due file
-
23-09-2019 - |
Domanda
Ho una tabella che contiene il seguente:
DataDate Value
2010-03-01 08:31:32.000 100
2010-03-01 08:31:40.000 110
2010-03-01 08:31:42.000 95
2010-03-01 08:31:45.000 101
. .
. .
. .
Ho bisogno di moltiplicare la colonna valore dalla differenza di tempo tra le file attuali e precedenti e somma che per l'intera giornata.
Io attualmente ho i dati istituito per venire in ogni 10 secondi che rende per una semplice conversione nella query:
SELECT Sum((Value/6) FROM History WHERE DataDate BETWEEN @startDate and @endDate
Dove @StartDate e @EndDate sono data odierna alle 00:00:00 e 11:59:59.
Prima di impostare i dati devono essere raccolti ogni 10 secondi sono stati raccolti ogni volta che il valore modificato. Non ci sono voci duplicate in termini di tempo, la differenza di tempo minimo è di 1 secondo.
Come posso impostare una query per ottenere il tempo trascorso tra le righe per il caso in cui non so l'intervallo di tempo tra le letture?
Sto usando SQL Server 2005.
Soluzione
WITH rows AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY DataDate) AS rn
FROM mytable
)
SELECT DATEDIFF(second, mc.DataDate, mp.DataDate)
FROM rows mc
JOIN rows mp
ON mc.rn = mp.rn - 1
In SQL Server 2012 +:
SELECT DATEDIFF(second, pDataDate, dataDate)
FROM (
SELECT *,
LAG(dataDate) OVER (ORDER BY dataDate) pDataDate
FROM rows
) q
WHERE pDataDate IS NOT NULL
Altri suggerimenti
Un piccolo trucco su richiesta del Quassnoi se si preferisce non utilizzare un Sottoseleziona potrebbe essere:
SELECT
DATEDIFF(second, LAG(dataDate) OVER (ORDER BY dataDate), dataDate)
FROM rows
WHERE LAG(dataDate) OVER (ORDER BY dataDate) IS NOT NULL