предыдущая, а НЕ текущая строка

Я пытаюсь получить среднее значение за последний год для набора результатов в postgres, используя это:

SELECT
    *,
   avg(units) OVER (                                              -- 3
       ORDER BY to_date(isoyear::text || '-' || week::text, 'IYYY-IW')      -- 1
       RANGE between interval '1 year' preceding and 1 preceding )
FROM
    mytable
   order by isoyear,week;

Но я получаю эту ошибку:

Ошибка SQL [22000]: ОШИБКА: невозможно привязать начальный кадр к типу привязки замыкающего кадра. Совет: укажите границы начального и конечного фрейма как одного типа

Я пробовал только что, но получаю синтаксическую ошибку:

RANGE between interval '1 year' preceding)

Что мне не хватает? Мне не нужна предыдущая и текущая строка, мне просто нужны предыдущие строки 1 год назад.

Спасибо


person Matias    schedule 16.12.2020    source источник


Ответы (1)


Вам нужно, чтобы обе границы диапазона имели согласованный тип данных — здесь это будут интервалы. Один из способов выразить то, что вы хотите:

RANGE between interval '1 year' preceding and interval '1 second' preceding

По сути, это отфильтровывает строки до предыдущей секунды: так что это исключает текущую строку и никакую другую строку, поскольку ваше выражение все равно не включает секунды.

person GMB    schedule 16.12.2020