oracle - Oracle 按空间相交分组?
问题描述
我在 160 平方公里的区域内拥有大量工作场所(+/- 200 000),并且分布在大约 20 年的时间里。
我想为每个工作场所获得的是:
交叉工作场所的 ID
所有
空间交叉工作场所
的 Min_Start_Date 所有空间交叉工作场所的 Max_Start_Date
所以基本上我需要相当于“按交叉点分组”,有人知道如何解决这个问题吗?
工作场所 ID 整数
StartDate Date
EndDate Date
Workplaces_GIS:
ID 整数
SHAPE SDOgeometru
解决方案
如果您使用的是 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;
推荐阅读
- python - 如何根据python中的条件计算两列字符串类型中的相似值?
- c# - 如何在foreach循环中跳出foreach循环而不从头开始计数?
- scikit-learn - 使用 Scikit-learn RFECV 时无法重现结果
- flutter - 如何在 onpressed 颤动上使用幻灯片动画在树上添加小部件
- .net-core - 在 .net core 的 swagger 中显示每个端点上所需的 OAuth 范围
- python - groupby pandas 在每条记录上都有一个列表?
- jspdf - Jspdf - 不能选择在pdf中一个接一个地添加元素
- algorithm - 从大于内存的文件中读取并进行模式匹配
- html - 来自 font awesome 版本 5.15.2 的编辑图标不会显示在 thymeleaf 表中以用于 sping mvc 项目
- azure-media-services - 在 azure 实时视频分析中重新建立媒体链接