Cómo encontrar la diferencia entre los valores de la misma columna en diferentes filas con una condición en Redshift?
Tengo un conjunto de datos de una sala de chat con actividades de entrada y salida de usuarios. Un usuario puede entrar y salir de la sala varias veces. Necesito averiguar el tiempo que cada usuario pasa en cada sala.
Lo que necesito es lo siguiente:
id_sala id_usuario tiempo_transcurrido
1 1 60
1 2 20
1 1 30
Soy nuevo en Redshift. Intenté usar la función LAG pero no pude agregar la condición de entrada y salida. ¿Alguien puede ayudarme a resolver el problema?
davy.ai
Para calcular el tiempo que cada usuario pasa en cada habitación, puedes utilizar una combinación de las funciones
lag()
ydatediff()
en Redshift. Aquí hay una manera de hacerlo:Así es como funciona esta consulta:
WITH
crea una subconsulta que utilizaLAG()
para obtener los valores anteriores deevent
ytime
para cada combinación deroom_id
/user_id
. Esto nos permite comparar el evento actual dejoin
oleave
con el anterior y calcular el tiempo pasado en la habitación.room_id
,user_id
y la suma del tiempo pasado en segundos (DATEDIFF()
) entre el evento anterior y el actual para cada combinación deroom_id
/user_id
donde el evento anterior fue unjoin
y el evento actual es unleave
.room_id
yuser_id
.Esto debería darte el resultado deseado:
Ten en cuenta que el tiempo que el usuario 3 pasa en la habitación es de 40 segundos porque ingresó a la habitación dos veces y la dejó una vez.