Dzisiaj zacząłem grać ze SpatiaLite i już natknąłem się na problem.
Dla każdego położenia punktu zapisanego w tableOne chciałbym wybrać jeden, najbliższy (odległość liniowa) punkt z tableTwo.
Do tej pory wymyśliłem niezdarne rozwiązanie, które wykorzystuje VIEW:
CREATE VIEW testview AS
SELECT
A.id ,
B.myValue,
Distance(A.Geometry, B.Geometry) AS distance
FROM tableOne AS A, tableTwo AS B
WHERE distance < 10000
ORDER BY A.Id, distance;
I wtedy:
SELECT * FROM testview
WHERE distance = (SELECT MIN(distance) FROM testview AS t WHERE t.id = testview.id)
zdaje się wykonywać pracę.
Dwa pytania:
Czy istnieje sposób na wykonanie takiego zapytania bez tworzenia WIDOKU?
Czy istnieje inny sposób optymalizacji tego zapytania w celu uzyskania lepszej wydajności? W rzeczywistym scenariuszu tableOne będzie miało setki par tysięcy rekordów, a tableTwo - 1,3 miliona.