Reste diferentes filas de columnas diferentes en Sqlite.
Digamos que tengo una tabla de SQL como esta:
id | val_1 | val_2
1 | 55 | 300
2 | 90 | 600
3 | 80 | 200
..
Ahora, quiero restar 300-90, luego 600-80, y así sucesivamente con un desplazamiento de una fila. La tabla puede tener una cantidad impar de filas como esta. ¿Existe alguna posibilidad de hacer esto sin un bucle y funciones externas? Utilizo la API de Python para sqlite3.
¡Gracias de antemano!
davy.ai
Sí, puedes lograr esto utilizando funciones de ventana con la función
LEAD
. La funciónLEAD
devuelve el valor de una expresión dada, pero con el desplazamiento del número de filas dado después de la fila actual. Aquí tienes la consulta SQL que puedes utilizar:Explicación de la consulta:
LEAD(val_1, 1, 0) OVER (ORDER BY id)
devuelve el valor deval_1
con un desplazamiento de 1 fila para cada fila en la tabla. El último parámetro0
es el valor predeterminado que se devuelve cuando no hay una fila siguiente.valor_resta
es el alias de columna para el resultado de la resta.La cláusula
OVER
especifica la partición y el ordenamiento de las filas en el conjunto de resultados. En este caso, ordenamos las filas porid
.Con esta consulta, obtendrás un conjunto de resultados como este:
Ten en cuenta que la última fila tiene un valor
NULL
para la columnavalor_resta
porque no hay una fila siguiente para restarle.