Oracle группа по пространственному пересечению? - PullRequest
0 голосов
/ 08 марта 2019

У меня большое количество рабочих мест (+/- 200 000) на площади 160 кв. Км, которые распределяются во времени в течение примерно 20 лет.

Что я хотел бы получить для каждого рабочего места:
ID
Идентификаторы пересекающихся сетей
Min_Start_Date всех пространственно пересекающихся рабочих мест
Max_Start_Date всех пространственно пересекающихся рабочих мест

Так что в принципе мне нужен эквивалент «группа по пересечению», кто-нибудь знает, как с этим справиться?

Рабочие места ID целое число
Дата начала
Дата окончания

Рабочие места_ГИС:
ID целое число
ФОРМА СДОГеометру

Schema

1 Ответ

1 голос
/ 24 апреля 2019

Если вы используете 11g R2 или выше, вы можете использовать этот запрос:

SELECT  a.ID,
        listagg(b.ID, ',') within group (order by b.ID) as Intersect_ids,
        min(b.StartDate) as Min_Start_Date,
        max(b.EndDate) as Max_Start_Date
    FROM workplaces a, workplaces b
        WHERE a.ID != b.ID
        AND sdo_relate(a.geom, b.geom, 'mask = anyinteract') = 'TRUE'
        GROUP BY a.ID;
...