Oracle
 sql >> Base de données >  >> RDS >> Oracle

obtenir un certain nombre de valeurs uniques sans séparer les valeurs appartenant au même bloc de valeurs

Ce n'est pas une réponse complète, mais je ne veux pas écrire beaucoup de questions dans les commentaires.
Votre objectif principal est d'envoyer des informations aux gens et d'éviter la situation où une personne reçoit deux fax. Vous avez donc d'abord besoin d'une liste de destinataires uniques, comme ceci :

select distinct otherid
  from NR_PVO_120

Si une personne a deux numéros de fax, vous devez décider lequel choisir :

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

(Vous avez tout cela dans les réponses à la question précédente)
Si vous prenez cette liste de numéros de fax, tous vos destinataires reçoivent le fax, et un seul fax pour chaque personne. Mais certains numéros de fax ne seront pas utilisés. Vous pouvez facilement les trouver :

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

Si vous envoyez un fax à l'un de ces numéros, certaines personnes reçoivent un fax deux fois.
L'anglais n'est pas ma langue maternelle, donc je ne comprends pas ce que vous voulez dire lorsque vous dites "sans diviser les numéros de fax". Comme je peux le voir dans votre question, vous devez peut-être utiliser l'ordre des numéros de fax dans votre question comme priorité de numéro (le numéro le plus élevé est situé dans le tableau - la probabilité la plus élevée de l'utiliser). Il semble que vous puissiez utiliser ce qui suit :

select otherid, fax
  from (select otherid, fax, row_number() over (partition by otherid order by row) rn
          from NR_PVO_120)
 where rn = 1

ici row dans order by la clause est une Row à partir de votre tableau d'exemple.

UPD
P. S. À propos de ma dernière requête :nous avons une table avec un certain ordre, et l'ordre est important. Nous prenons les lignes du tableau ligne par ligne. Prenez la première ligne et mettez son otherid et fax au tableau des résultats. Prenez ensuite la rangée suivante. S'il contient un autre fax numéro et otherid , nous le prenons, si otherid déjà dans notre tableau de résultats, nous l'ignorons. Avez-vous demandé cet algorithme ?