transponer pasar insertar filas fechas fecha entre ejemplos ejemplo diferencia dias comparar columnas calcular sql-server database difference-between-rows

sql server - pasar - Calcular la diferencia de tiempo entre dos filas



pasar filas a columnas sql server sin pivot (2)

Tengo una tabla que contiene lo siguiente:

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 . . . . . .

Necesito multiplicar la columna de valor por la diferencia de tiempo entre las filas actual y anterior y sumar eso para todo el día.

Actualmente tengo la configuración de datos por venir cada 10 segundos, lo que hace una conversión simple en la consulta:

SELECT Sum((Value/6) FROM History WHERE DataDate BETWEEN @startDate and @endDate

Donde @startDate y @endDate son la fecha de hoy a las 00:00:00 y 11:59:59.

Antes de configurar los datos que se recopilarían cada 10 segundos, se recopilaban cada vez que cambiaba el valor. No hay entradas duplicadas en términos de tiempo, la diferencia de tiempo mínima es de 1 segundo.

¿Cómo puedo configurar una consulta para obtener el tiempo transcurrido entre filas para el caso cuando no sé el intervalo de tiempo entre las lecturas?

Estoy usando SQL Server 2005.


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

En 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


Un pequeño ajuste en la consulta de Quassnoi si prefiere no usar una Subselección sería:

SELECT DATEDIFF(second, LAG(dataDate) OVER (ORDER BY dataDate), dataDate) FROM rows WHERE LAG(dataDate) OVER (ORDER BY dataDate) IS NOT NULL