給定兩個郵政編碼和下面的表之間的函數zipdistance(zipfrom,zipto),計算距離(英里):Oracle分析問題
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過」,而我踩着用這個進入未知區域。任何關於此的指導都非常感謝。
我覺得這很接近。在你的例子中,rn只是按距離排序的兩個拉鍊之間的距離的排名。我需要的是該列表中最後一個的zip距離,它的位置總和加上所有先前的位置總和大於或等於N. – 2009-06-23 17:10:59