Ето моята главоблъсканица за запитване: - Имам таблица с клиенти с дължина и ширина за техния пощенски код. - Имам таблица с доставчици също с географска дължина и ширина за техния пощенски код. - Няма връзки между таблиците. - Имам дефинирана от потребителя функция, която изчислява разстоянието между два набора от дължина и ширина.
Имам следната заявка, която може да покаже (до) трите най-близки доставчика в радиус от 50 мили за даден клиент (dbo.latlngdistance е дефинираната от потребителя функция):
select top 3 dname1, dcity, dstate, dzip, dbo.latlngdistance(dlr.latitude, dlr.longitude,
(select lat from homeowner where ho_identifier = 16),
(select lng from homeowner where ho_identifier = 16)) AS SortDistance
from dlr
where dbo.latlngdistance(dlr.latitude, dlr.longitude,
(select lat from homeowner ho_identifier = 16),
(select lng from homeowner where ho_identifier = 16)) between 0 and 50
Order By SortDistance
Имам друга заявка, която връща всички доставчици в радиус от 50 мили от всички клиенти (ограничил съм броя на клиентите в този пример, защото производителността за тази заявка е ужасна):
select ho.ho_identifier, ho.ho_firstname, ho.ho_lastname, ho.ho_email, dname1, dcity, dstate, dzip
from dlr
cross join homeowner ho
where dbo.latlngdistance(dlr.latitude, dlr.longitude,
(select lat from homeowner ho2 where ho.ho_identifier = ho2.ho_identifier),
(select lng from homeowner ho3 where ho.ho_identifier = ho3.ho_identifier)) between 0 and 50
and ho.ho_identifier in (16, 17, 18, 19, 20)
Order By ho.ho_identifier
Въпросът ми е как да получа (до) трите най-близки доставчика в радиус от 50 мили за всички клиенти?