我有一个customers
表,其中包含birthdate::date
和id::integer
列。
运行以下查询时出现语法错误(ERROR: syntax error at or near "over"
):
select lead(age, 1) - age over (order by age) as diff
from customers
join (select id,
extract(year from age(birthdate))::integer as age
from customers) as sub
on customers.id = sub.id
order by age;
但不是在我将第一行调整到
时select (-age) + lead(age, 1) over (order by age) as diff
我不明白这种行为。导致错误的原因是什么?
我正在使用PostgreSQL 9.6.6。
答案 0 :(得分:2)
over (order by age)
不是完整表达式的修饰符。 lead(...) over(...)
是一个单位,你不能在它们之间放置随机的东西。如果你想稍后将- age
部分放在表达式中,你可以,你只需要将它移回到你所尝试的范围之外:
select lead(age, 1) over (order by age) - age as diff
答案 1 :(得分:0)
为什么要为此使用子查询?
select lead(age) over (order by age) as diff - age
from (select c.*, extract(year from age(birthdate))::integer as age
from customers
) c
order by age;
如果您想要partition by
,我也不会感到惊讶。