У меня есть две таблицы в SQL.Первый - это полигоны проекта.Второй - это любая граница, которую я хочу применить к полигонам проекта на основе максимального пространственного пересечения.
Например, если проект 1 перекрывает 2 состояния, я хочу вернуть имя состояния, в котором проект 1 имеет наибольшую площадьв.
Я сделал это с помощью запроса ниже.PrjID - это таблица проектов, а STATE - таблица состояний.Я хочу, чтобы возвращалось statename на основе максимального пересечения между каждой записью PrjID и записью STATE.
SELECT *
FROM
(SELECT a.PROJECT_DELIVERY_ID, b.statename, a.Shape.STIntersection(b.Shape).STArea() AS Area
FROM PrjID a
INNER JOIN STATE b
ON a.Shape.STIntersects(b.Shape) = 1) as c
INNER JOIN
(SELECT a.PROJECT_DELIVERY_ID, MAX(a.Shape.STIntersection(b.Shape).STArea()) AS Area
FROM PrjID a
INNER JOIN STATE b
ON a.Shape.STIntersects(b.Shape) = 1
GROUP BY a.PROJECT_DELIVERY_ID) as d
ON c.PROJECT_DELIVERY_ID = d.PROJECT_DELIVERY_ID
AND c.Area = d.Area
Мне кажется, что я выполняю один и тот же запрос дважды и присоединяюсь к ним.Есть ли более эффективный способ сделать это?
Спасибо