получить идентификатор сгруппированного и агрегированного минимального значения определенного столбца sql server

#sql-server #tsql

#sql-сервер #tsql

Вопрос:

как я могу получить ближайший филиал компании в соответствии с приведенной ниже таблицей

 BranchId BusinessId Distance
--      ---         ---
24      267         221.71464641964 
13      258         253.099943313603
14      258         253.099943313603
15      258         17.3790669756556
17      260         3456.74117699001
32      260         9.852770682035
121     260         374.907804283969
122     260         374.907804283969
127     260         213.074377898838
63      292         18.6199088005564
64      292         9.35737878020064
65      292         3456.74117699001
  

таким образом, результат будет таким

 BranchId BusinessId Distance
--       ---        ---
24       267        221.71464641964
15       258        17.3790669756556
32       260        9.852770682035
64       292        9.35737878020064
  

Ответ №1:

Вы можете использовать оконные функции:

 select distinct
  first_value(BranchId) over (partition by BusinessId order by Distance) BranchId,
  BusinessId,
  min(Distance) over (partition by BusinessId) Distance
from tablename
  

Смотрите демонстрацию.
Результаты:

 > BranchId | BusinessId |         Distance
> -------: | ---------: | ---------------:
>       15 |        258 | 17.3790669756556
>       24 |        267 |  221.71464641964
>       32 |        260 |   9.852770682035
>       64 |        292 | 9.35737878020064