Diferencia SQL entre los valores de las celdas (la función LAG no está funcionando)
Tengo una tabla SQL como esta:
ID | Hora | Valor | Máquina
——+———–+———+———–
7 | 12:00 | 154400 | 20
6 | 12:00 | 77840 | 17
5 | 11:00 | 10480 | 11
4 | 11:00 | 13214 | 14
3 | 11:00 | 76340 | 17
2 | 11:00 | 15410 | 20
1 | 10:00 | 75000 | 17
Necesito encontrar la diferencia basada en la máquina entre dos valores en diferentes momentos.
Necesito encontrar una diferencia (76340-75000 = 1340) entre los id 1 y 3.
He intentado esto antes:
select
t1.Máquina, t1.[ID], t2.[ID], t1.Valor, t2.Valor,
t2.Valor - t1.Valor as diferencia
from
hava t1
cross apply
hava t2
where
t1.Máquina = t2.Máquina
and t1.ID <> t2.ID
and t1.Máquina = 17
pero compara el t1.id con toda la tabla.
Desafortunadamente no puedo utilizar la función lag
debido a que estoy usando SQL Server 2008 (sí, sé que no debería).
davy.ai
Para encontrar la diferencia basada en la máquina entre dos valores en diferentes momentos, puedes utilizar un self-join en la misma tabla con alias diferentes. Aquí tienes un ejemplo de consulta:
Esta consulta devuelve el número de máquina, el ID del primer valor, el propio primer valor, el segundo valor, la hora del segundo valor y la diferencia entre los dos valores. Solo incluye filas donde la segunda hora es mayor que la primera hora y los IDs no son iguales. Puedes modificar la cláusula WHERE para filtrar por un número de máquina específico.