Data una funzione zipdistance (zipfrom, zipto), che calcola la distanza (in miglia) tra due codici di avviamento postale e le seguenti tabelle:Oracle Analytic Domanda
create table zips_required(
zip varchar2(5)
);
create table zips_available(
zip varchar2(5),
locations number(100)
);
Come posso creare una query che restituirà a me ogni codice zip dalla tabella zips_required e la distanza minima che produrrebbe una somma (località)> = n.
Fino ad ora abbiamo appena correre un'interrogazione ciclo completo per ogni raggio fino a quando abbiamo incontrato i criteri.
--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
Questo può richiedere un po 'di tempo in un elenco di grandi dimensioni. Ci si sente come questo potrebbe essere fatto con una query analitica oracolo lungo le linee di:
min() over (
partition by zips_required.zip
order by zipdistance(zips_required.zip, zips_available.zip)
--range stuff here?
)
Le uniche domande analitiche che ho fatto sono stati "row_number over (partizione per ordine da)" basata, e sto calpestando in aree sconosciute con questo. Qualsiasi consiglio su questo è molto apprezzato.
Penso che questo sia vicino. Nel tuo esempio, rn sarà solo la classifica della distanza tra 2 zip ordinate dalla distanza. Ciò di cui ho bisogno è la distanza zip dell'ultima in quella lista che la somma delle sue posizioni più tutte le posizioni precedenti è maggiore o uguale a N. –
@Josh: questo restituirà la distanza della posizione più lontana con la N più vicina. Non è quello che vuoi? – Quassnoi
limite 1 in una query Oracle? Ho perso qualcosa. – tuinstoel