Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

obter um número de valores únicos sem separar valores que pertencem ao mesmo bloco de valores


Esta não é uma resposta completa, mas não quero escrever muitas perguntas nos comentários.
Seu principal objetivo é enviar informações às pessoas e evitar a situação em que uma pessoa recebe fax duas vezes. Então você primeiro precisa de uma lista de destinatários exclusivos, como esta:
select distinct otherid
  from NR_PVO_120

Se uma pessoa tiver dois números de fax, você precisa decidir qual deles escolher:
select otherid, fax
  from (select otherid, fax, row_number() over (partition by otherid order by <choosing rule>) rn
          from NR_PVO_120)
 where rn = 1

(Tudo isso você tem nas respostas da pergunta anterior)
Se você pegar esta lista de números de fax, todos os seus destinatários receberão o fax, e apenas um fax para cada pessoa. Mas alguns números de fax não serão usados. Você pode encontrá-los facilmente:
select otherid, fax
  from (select otherid, fax, row_number() over (partition by otherid order by <choosing rule>) rn
          from NR_PVO_120)
 where rn > 1

Se você enviar fax para qualquer um desses números, algumas pessoas recebem um fax duas vezes.
Inglês não é minha língua nativa, então não entendo o que você quer dizer quando diz "sem dividir números de fax". Como posso ver na sua pergunta, possivelmente você precisa usar a ordem dos números de fax na sua pergunta como prioridade numérica (o número mais alto está situado na tabela - maior a probabilidade de usá-lo). Parece que você pode usar o seguinte:
select otherid, fax
  from (select otherid, fax, row_number() over (partition by otherid order by row) rn
          from NR_PVO_120)
 where rn = 1

aqui row em order by cláusula é uma Row da sua tabela de exemplo.

UPD
P. S. Sobre minha última consulta:temos uma tabela com determinada ordem, e a ordem é importante. Pegamos linhas da tabela linha por linha. Pegue a primeira linha e coloque seu otherid e fax para a tabela de resultados. Em seguida, pegue a próxima linha. Se contiver outro fax número e otherid , nós o consideramos, se otherid já em nossa tabela de resultados, nós a ignoramos. Você perguntou esse algoritmo?