Obtenir l'location qui a la distance maximale d'un autre location

J'ai une table comme ci-dessous:

Create table Distance (Loc1ID int not null, Loc2ID int not null, Distance int not null) Insert into Distance values(7 ,8023989 ,1) Insert into Distance values(11 ,3705843 ,1) Insert into Distance values(14 ,3700170 ,4) Insert into Distance values(23 ,1353297 ,5) Insert into Distance values(23 ,1491303 ,21) Insert into Distance values(32 ,12514 ,74) Insert into Distance values(32 ,507545 ,25) Insert into Distance values(75 ,7971270 ,2) Insert into Distance values(75 ,4473476 ,1) Insert into Distance values(75 ,3280411 ,6) Insert into Distance values(79 ,7100087 ,7) Insert into Distance values(81 ,7986762 ,2) Insert into Distance values(84 ,5034 ,31) Insert into Distance values(84 ,3672346 ,3) 

Je voulais connaître les endroits qui ont la distance maximum de Loc1ID. J'ai besoin de l'o / p en format ci-dessous. Ainsi, la production attendue sera

 Loc1ID Loc2ID Distance 7 8023989 1 11 3705843 1 14 3700170 4 23 1491303 21 32 12514 74 75 3280411 6 79 7100087 7 81 7986762 2 84 5034 31 

J'ai essayé ci-dessous la requête, mais il ne me donne qu'un seul logging.

 select top 1 Loc1ID, Loc2ID, max(distance) as Distance from Distance group by Loc1ID,Loc2ID order by max(distance) desc 

Comment puis-je procéder ici? Toute aide est appréciée.

 select Loc1ID, Loc2ID, distance from (select Loc1ID, Loc2ID, distance, rank() over(partition by Loc1ID order by distance desc) rn from DISTANCE) a where rn =1 

Pour chaque Loc1ID , vous voulez le Loc2ID qui a la distance maximale. Pour cela, vous voulez utiliser row_number() :

 select d.Loc1ID, d.Loc2ID, d.distance from (select d.*, row_number() over (partition by Loc1ID order by distance desc) as seqnum from Distance d ) d where seqnum = 1; 

Si vous voulez plusieurs lignes lorsqu'il y a des duplicates, utilisez dense_rank() au lieu de row_number() .