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

Я пытаюсь получить среднее значение за последний год для набора результатов в 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 Error [22000]: ERROR: can't coerce leading frame bound to type of trailing frame bound Hint: specify the leading and trailing frame bounds as the same type

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

RANGE between interval '1 year' preceding)

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

Спасибо

# datetime range date-arithmetic
Источник
Codelisting
за 1 против
Лучший ответ

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

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

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

Codelisting
Популярные категории
На заметку программисту