Я пытаюсь получить среднее значение за последний год для набора результатов в 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)
Что мне не хватает? Мне не нужны предыдущая и текущая строки, мне просто нужны предыдущие строки на год назад.
Спасибо
Вам нужны обе границы диапазона, чтобы иметь согласованный тип данных - здесь это будут интервалы. Один из способов выразить то, что вы хотите:
RANGE between interval '1 year' preceding and interval '1 second' preceding
В основном это отфильтровывает строки до предыдущей секунды: таким образом, это исключает текущую строку и никакую другую строку, так как ваше выражение в любом случае не включает секунды.