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.

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.

Tags:  , , ,

Answer

  1. Avatar for 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ón LAG 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!

Comments are closed.