Hay dos razones por las que row y
no se devuelve debido a la condición:
b.start > a.start
significa que una fila nunca se unirá a sí misma- El GROUP BY devolverá solo un registro por
APP_nm
pero todas las filas tienen el mismo valor.
Sin embargo, hay más errores lógicos en la consulta que no se manejarán correctamente. Por ejemplo, ¿cómo sabe cuándo comienza una sesión "nueva"?
La lógica que busca se puede lograr en PostgreSQL normal con la ayuda de DISTINCT ON
función, que muestra una fila por valor de entrada en una columna específica. Sin embargo, DISTINCT ON
no es compatible con Redshift.
Algunas posibles soluciones alternativas:DISTINCT ON como funcionalidad para Redshift
El resultado que busca sería trivial usando un lenguaje de programación (que puede recorrer los resultados y almacenar variables), pero es difícil de aplicar a una consulta SQL (que está diseñada para operar en filas de resultados). Recomendaría extraer los datos y ejecutarlos a través de un script simple (por ejemplo, en Python) que luego podría generar las combinaciones de Inicio y Fin que busca.
Este es un excelente caso de uso para una función de transmisión de Hadoop , que he implementado con éxito en el pasado. Tomaría los registros como entrada, luego 'recordaría' la hora de inicio y solo generaría un registro cuando se haya cumplido la lógica final deseada.