Dada una función zipdistance (zipfrom, zipto) que calcula la distancia (en millas) entre dos códigos postales y las siguientes tablas:Oracle Analytic Pregunta
create table zips_required(
zip varchar2(5)
);
create table zips_available(
zip varchar2(5),
locations number(100)
);
¿Cómo puedo construir una consulta que devolverá a mí cada código postal de la tabla zips_required y la distancia mínima que produciría una suma (ubicaciones)> = n.
Hasta ahora solo hemos ejecutado un bucle exhaustivo preguntando por cada radio hasta que cumplamos los criterios.
--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
Esto puede llevar un tiempo en una lista grande. Se siente como si esto se podría hacer con una consulta analítica oráculo lo largo de las líneas de:
min() over (
partition by zips_required.zip
order by zipdistance(zips_required.zip, zips_available.zip)
--range stuff here?
)
Las únicas consultas analíticas que he hecho han sido "ROW_NUMBER sobre (partición por orden por)" basada, y estoy pisando en áreas desconocidas con esto. Cualquier orientación sobre esto es muy apreciada.
Creo que esto está cerca. En su ejemplo, rn solo será la clasificación de la distancia entre 2 cremalleras ordenadas por la distancia. Lo que necesito es el zipdistance del último en esa lista que suma la suma de sus ubicaciones más todas las ubicaciones anteriores es mayor o igual que N. –
@Josh: esto devolverá la distancia de la ubicación más alejada con la N más cercana. ¿No es lo que quieres? – Quassnoi
límite 1 en una consulta de Oracle? Me perdí algo. – tuinstoel