PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Buscar linhas com base na condição


Existem duas razões pelas quais row y não é retornado é devido à condição:
  • b.start > a.start significa que uma linha nunca se unirá a si mesma
  • O GROUP BY retornará apenas um registro por APP_nm valor, mas todas as linhas têm o mesmo valor.

No entanto, há outros erros lógicos na consulta que não serão tratados com êxito. Por exemplo, como ele sabe quando uma "nova" sessão começa?

A lógica que você procura pode ser obtida no PostgreSQL normal com a ajuda de um DISTINCT ON função, que mostra uma linha por valor de entrada em uma coluna específica. No entanto, DISTINCT ON não é suportado pelo Redshift.

Algumas possíveis soluções alternativas:DISTINCT ON como funcionalidade para Redshift

A saída que você procura seria trivial usando uma linguagem de programação (que pode percorrer resultados e armazenar variáveis), mas é difícil de aplicar a uma consulta SQL (que é projetada para operar em linhas de resultados). Eu recomendaria extrair os dados e executá-los por meio de um script simples (por exemplo, em Python) que poderia gerar as combinações de início e fim que você procura.

Este é um excelente caso de uso para uma função Hadoop Streaming , que implementei com sucesso no passado. Ele tomaria os registros como entrada, então 'lembraria' a hora de início e só produziria um registro quando a lógica final desejada fosse atendida.