У меня есть простая таблица базы данных с тремя столбцами: id
, x
, y
.x
и y
- это только координаты точек на линии.Я хочу использовать функцию окна SQLite для разделения таблицы, используя скользящее окно из трех строк, а затем получить значение y
, которое является самым дальним от значения y
первой координаты (строки) в окне.
Пример:
| id | x | y |
|----|---|---|
| 1 | 1 | .5|
| 2 | 2 | .9|
| 3 | 3 | .7|
| 4 | 4 |1.1|
| 5 | 5 | 1 |
Таким образом, первый раздел будет состоять из:
| id | x | y |
|----|---|---|
| 1 | 1 | .5|
| 2 | 2 | .9|
| 3 | 3 | .7|
И желаемый результат будет:
| id | x | y | d |
|----|---|---|---|
| 1 | 1 | .5| .4|
| 2 | 2 | .9|
| 3 | 3 | .7|
Поскольку окно с id
= 1 в качестве CURRENT ROW
будет иметь максимальное отклонение .4;максимальное расстояние между y
значением первой строки в разделе .5
и .9
составляет .4
.
Окончательный ожидаемый результат:
| id | x | y | d |
|----|---|---|---|
| 1 | 1 | .5| .4|
| 2 | 2 | .9| .2|
| 3 | 3 | .7| .4|
| 4 | 4 |1.1| .1|
| 5 | 5 | 1 | |
Я пытался использовать оконную функцию, например: WINDOW win1 AS (ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING
, которая дает мне правильное окно.
С определенным окном я попытался сделать что-то вроде:
SELECT
max(abs(y - first_value(y) OVER win1)) AS d
FROM t
WINDOW win1 AS (ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING)
Но я получаю ошибку из-за неправильного использования first_value
.
Я думаю, что проблема у меня естьЭто не правильный подход для расчета по каждой строке раздела, но я не смог найти другое решение или подход, который соответствует тому, что я пытаюсь сделать здесь.