sql - transponer - Calcule la diferencia entre el valor en diferentes filas y columnas
sql transponer columnas a filas (1)
Por favor, ayúdame a resolver la consulta a continuación. Supongamos que tengo un nombre de tabla como Datos con 3 filas: Fecha1, Fecha2 y ventana de visita. Necesito calcular el valor de la ventana de visita. Debe ser la diferencia de (n + 1) la fila de la fecha 1 y la n-ésima fila de la fecha2. Por ejemplo: Diferencia del valor de la segunda fila de la Fecha1 y la primera fila del valor de la fecha2 dividido entre 7. Por favor, ayuda.
Table: Data
------------
Date1 Date2 VW
13-DEC-2011 15-DEC-2011 ?
18-DEC-2011 16-DEC-2011 ?
21-DEC-2011 24-DEC-2011 ?
Gracias
select
Date1,
Date2,
lead(Date1) over (order by Date1) next_date1,
((lead(Date1) over (order by Date1)) - Date2)/7 as Diff
From DATA_TABLE
Para la última fila no obtendrá ningún VW, porque no hay n + 1 Fecha1.
lead(column)
devuelve el valor para el parámetro de column
de la siguiente fila como se especifica en la cláusula over
.
Puede encontrar ejemplos y otras funciones similares aquí .
ACTUALIZACIÓN (respuesta a un comentario de pregunta - cómo comparar con otra columna)
select
Date1,
Date2,
Diff,
another_column,
CASE
when Diff < another_column then ''it is lower''
when Diff > another_column then ''it is higher''
when Diff = another_column then ''are equal''
END as comparation,
CASE
when round(diff -another_column,3) = 0 then ''almost equal''
else ''definitely not equal''
END as rounded_comparation
from(
select
Date1,
Date2,
lead(Date1) over (order by Date1) next_date1,
((lead(Date1) over (order by Date1)) - Date2)/7 as Diff,
another_column
From DATA_TABLE
)