给定一个函数 zipdistance(zipfrom,zipto),它计算两个邮政编码之间的距离(以英里为单位)和下表:
create table zips_required(
zip varchar2(5)
);
create table zips_available(
zip varchar2(5),
locations number(100)
);
如何构造一个查询,该查询将返回给我 zips_required 表中的每个邮政编码以及产生总和(位置)> = n 的最小距离。
到目前为止,我们只是对每个半径运行了一个详尽的循环查询,直到我们满足条件。
--Do this over and over incrementing the radius until the minimum requirement is met
select count(locations)
from zips_required zr
left join zips_available za on (zipdistance(zr.zip,za.zip)< 2) -- Where 2 is the radius
在一个大列表上这可能需要一段时间。感觉这可以通过一个 oracle 分析查询来完成,如下所示:
min() over (
partition by zips_required.zip
order by zipdistance( zips_required.zip, zips_available.zip)
--range stuff here?
)
我所做的唯一分析查询是基于“row_number over (partition by order by)”的,我正在涉足未知领域。非常感谢对此的任何指导。