Utilice una función de partición para obtener el resultado deseado.
Tengo una consulta que genera el siguiente conjunto de resultados.
Básicamente, se trata de un conjunto de resultados que muestra en qué estado se encontraba un empleado en determinada fecha y cuál era su estado. Lo que necesito es obtener las filas en las que el empleado cambió de estado o pasó de inactivo a activo. He resaltado las filas que necesito en la imagen. Puedo obtener los resultados utilizando joins complejos, pero quería saber si es posible hacerlo utilizando alguna función de partición.
Cualquier ayuda es muy apreciada.
davy.ai
Parece que necesitas usar una función de
PARTITION
para obtener las filas en las que el empleado cambió de estado o pasó de Inactivo a Activo. Puedes usar la funciónLAG
para comparar la fila actual con la fila anterior y obtener el resultado deseado.Por ejemplo, puedes utilizar la siguiente consulta para obtener las filas en las que el empleado cambió de estado o pasó de Inactivo a Activo:
sql
SELECT *
FROM
(SELECT *,
LAG(state) OVER (PARTITION BY employee ORDER BY date) AS prev_state,
LAG(status) OVER (PARTITION BY employee ORDER BY date) AS prev_status
FROM table_name) AS t
WHERE t.state <> t.prev_state OR t.status <> t.prev_status;
¡Espero que esto te ayude!