eine Funktion zipdistance (zipfrom, zipto) gegeben, die die Entfernung (in Meilen) zwischen zwei Postleitzahlen und den folgenden Tabellen berechnet:Oracle Analytic Frage
create table zips_required(
zip varchar2(5)
);
create table zips_available(
zip varchar2(5),
locations number(100)
);
Wie kann ich eine Abfrage erstellen, die mir zurück jede Postleitzahl aus der Tabelle zips_required und der Mindestabstand, der eine Summe (Orte)> = n ergeben würde.
Bis jetzt haben wir nur eine umfassende Schleife Abfrage für jeden Radius ausgeführt, bis wir die Kriterien erfüllen.
Dies kann eine Weile auf einer großen Liste dauern. Es fühlt sich an wie diese mit einer Oracle-analytischen Query entlang der Linien von getan werden könnte:
min() over (
partition by zips_required.zip
order by zipdistance(zips_required.zip, zips_available.zip)
--range stuff here?
)
Die einzigen analytischen Abfragen Ich habe schon getan haben „ROW_NUMBER über (Partition im Auftrag von)“ basiert, und ich beschreiten in unbekannte Bereiche mit diesem. Jede Anleitung dazu wird sehr geschätzt.
Ich denke, das ist in der Nähe. In Ihrem Beispiel ist rn nur die Rangfolge der Entfernung zwischen 2 Reißverschlüssen, geordnet nach der Entfernung. Was ich brauche, ist die Zipentfernung des letzten in dieser Liste, wobei die Summe seiner Orte plus alle vorherigen Orte größer oder gleich N ist. –
@Josh: Dies wird die Entfernung des entferntesten Ortes mit dem nächsten N zurückgeben. Ist es nicht was willst du? – Quassnoi
Limit 1 in einer Oracle-Abfrage? Ich habe etwas verpasst. – tuinstoel