Я начал играть со SpatiaLite сегодня и уже наткнулся на проблему.
Для каждой точки, сохраненной в tableOne, я бы хотел выбрать одну, ближайшую (линейное расстояние) точку из tableTwo.
До сих пор я придумал неуклюжее решение, которое использует 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;
А потом:
SELECT * FROM testview
WHERE distance = (SELECT MIN(distance) FROM testview AS t WHERE t.id = testview.id)
кажется, делает работу.
Два вопроса:
Есть ли способ выполнить такой запрос без создания VIEW?
Есть ли другой способ оптимизировать этот запрос для повышения производительности? В реальном сценарии tableOne будет иметь сотни-пару тысяч записей, а tableTwo - 1,3 миллиона.