es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  ,

Answer

  1. Avatar for 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:

    SELECT 
        t1.Machine, t1.ID, t1.Value as primer_valor, t2.Value as segundo_valor, 
        t2.Time as segundo_tiempo, t2.Value - t1.Value as diferencia
    FROM 
        [nombre de tabla] t1
    JOIN 
        [nombre de tabla] t2 ON t1.Machine = t2.Machine 
                       AND t2.Time > t1.Time 
                       AND t1.ID <> t2.ID 
    WHERE 
        t1.Machine = [númerodemáquina] -- reemplazar con el número de máquina deseado
    ORDER BY 
        t1.Time DESC
    

    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.

Comments are closed.