Comecei a jogar com o SpatiaLite hoje e já me deparei com um problema.
Para cada local do ponto armazenado no tableOne, eu gostaria de selecionar um ponto mais próximo (distância linear) da tableTwo.
Até agora, eu vim com uma solução desajeitada que utiliza o 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;
E depois:
SELECT * FROM testview
WHERE distance = (SELECT MIN(distance) FROM testview AS t WHERE t.id = testview.id)
parece fazer o trabalho.
Duas questões:
Existe uma maneira de executar essa consulta sem criar uma VIEW?
Existe alguma outra maneira de otimizar essa consulta para obter melhor desempenho? Em um cenário do mundo real, o tableOne terá centenas de milhares de registros e o tableTwo - 1,3 milhão.