sql >> Base de Datos >  >> RDS >> PostgreSQL

Obtener filas en función de la condición

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.