Cómo sacar la diferencia entre dos filas con PostgreSQL

Published: Jan 27, 2015 by Noe Nieto

Elefantote

Tengo una tabla muy simple donde se guardan mediciones. Cada fila corresponde a una medición y cada fila tiene una columna con el ID.

CREATE TABLE history (
  id SERIAL,
  conteo INT
);

Ahora insertaré algunos datos.

INSERT INTO history(conteo)
VALUES (43), (63), (22), (41) ,(85);

Necesito calcular qué tanto ha cambiado el valor de conteo de una columna con respecto a la columna anterior. ¿Cómo se hace eso? La respuesta es más sencilla de lo que me imaginé. Este es uno de esos casos donde se puede hacer un JOIN de la tabla consigo misma. Esto en inglés se le llama Self-join.

SELECT Y.id, Y.conteo- X.conteo AS "Diferencia"
FROM history X
JOIN history Y ON X.id=(Y.id -1)
ORDER BY Y.id DESC;

La solución, en este caso especifico, consiste en aprovechar que la columna ID es un numero entero que crece conforme se van insertando columnas. Simplemente se busca que el id de la columna anterior sea equivalente al de la columna actual menos uno.

El resultado es este:

ID DIFERENCIA
5 44
4 19
3 -41
2 20

Obviamente en condiciones reales no todas las tablas tendrán un id seriado de 1 en 1. Pero si la tabla incluye la fecha y hora de la creacion de la columna se puede usar esta columna.

Aca dejo un SQLFiddle para que puedas jugar con los datos.


Share

Latest Posts

Práctica: Trabajando con Ramas en Git (Parte 2)
Práctica: Trabajando con Ramas en Git (Parte 2)

Simula un entorno de equipo en Git. Aprende a trabajar con múltiples ramas, visualizar el historial con git log --graph y a integrar cambios de diferentes colaboradores.

Práctica: Trabajando con Ramas en Git (Parte 1)
Práctica: Trabajando con Ramas en Git (Parte 1)

Aprende a usar ramas en Git para experimentar sin miedo. Crea, cambia y combina ramas en esta guía para principiantes.

Cómo Usar la Librería Tenacity en Python
Cómo Usar la Librería Tenacity en Python

Una pequeña guía para comenzar a usar la librería Tenacity de Python