Присвойте координатное расстояние каждого предмета конкретному предмету. - PullRequest
0 голосов
/ 07 января 2020

Я хотел бы предоставить список всех элементов, которые находятся ближе всего к конкретному элементу, и дать номера документов, на которых они появляются.

Итак, для таблицы, где X и Y являются координатами

Item            X      Y
Apple           0      2
Orange          1      3
Pear            0      4
Orange          1      3

Я хочу вернуть что-то вроде

Item       Closest Items         Distance
Apple         Orange                (SQRT(2))            
Apple         Orange                 (SQRT(2))                   
etc

Мое зависание - это часть расстояния и то, как она отфильтровывает строку наименьшего элемента сверху.

Пока у меня есть

SELECT Item, T1.Item as [Closest Item],
(SQRT( (Here's where I get lost on the selection of subsequent coordinates))

В настоящее время это делается в MS Access, но у меня также есть библиотека python / SQLite. Предпочли бы Access для более простой автоматизации.

РЕДАКТИРОВАТЬ: Сделано это проще.

1 Ответ

2 голосов
/ 08 января 2020

Во-первых, в таблице должен быть первичный ключ, такой как id, поэтому таблица выглядит следующим образом:

id   Item            X      Y
1    Apple           0      2
2    Orange          1      3
3    Pear            0      4
4    Orange          1      3

Теперь вы можете выполнить самостоятельное соединение и рассчитать расстояние по формуле:

distance = square root((x1 - x2)^2 + (y1 - y2)^2)

вот так:

SELECT t.Item, tt.Item AS [Closest Items],
  SQR((t.X - tt.X) * (t.X - tt.X)+ (t.Y - tt.Y) * (t.Y - tt.Y)) AS Distance
FROM tablename AS t INNER JOIN tablename AS tt
ON t.id <> tt.id
ORDER BY t.Item, tt.Item, SQR((t.X - tt.X) * (t.X - tt.X)+ (t.Y - tt.Y) * (t.Y - tt.Y))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...