Я думаю, что в строке 4 вашего ожидаемого результата ближайшие значения неверны.Это должно быть:
4 100 40 43 40
по крайней мере это результат, который я получаю следующим образом:
select t.*, tt.x1 closest_x1, tt.y1 closest_y1
from tablename t
inner join tablename tt
on tt.key = (
select min(key) from tablename where power(x1 - t.x1, 2) + power(y1 - t.y1, 2) = (
select min(power(x1 - t.x1, 2) + power(y1 - t.y1, 2)) from tablename where key <> t.key
)
)
order by t.key
Результаты:
| key | x1 | y1 | closest_x1 | closest_y1 |
| ---- | --- | --- | ---------- | ---------- |
| 1 | 31 | 34 | 43 | 40 |
| 2 | 43 | 40 | 41 | 44 |
| 3 | 41 | 44 | 43 | 40 |
| 4 | 100 | 40 | 43 | 40 |