我有一张桌子,如下表
id | dob | date
----------+------------+-----------
1 | 22/09/2009 | 28/10/2014
1 | 22/09/2009 | 25/11/2014
1 | 22/09/2009 | 16/12/2014
2 | 08/01/2010 | 30/09/2014
2 | 08/01/2010 | 03/10/2014
我正在通过Postgres中的以下代码计算年龄(以月为单位)
SELECT id, ((EXTRACT(year FROM age(date,dob)) :: int) * 12) + (EXTRACT(month FROM age(date,dob))) FROM exmpleTable
结果如下
id | age
----------+------------
1 | 61
1 | 62
1 | 62
2 | 56
2 | 56
“日期”是每月唯一的。因此,两个日期不会在同一个月内发生。 现在我需要以下结果
id | age
----------+------------
1 | 61
1 | 62
1 | 63
2 | 56
2 | 57
逻辑:
任何一个
1)如果计算出的年龄与上述年龄相同,则加一(我不确定如何使用滞后)
OR
2)可以使用与“日期”相同月份的月底日期,以确保不会重复以月为单位的年龄
或其他逻辑
有没有办法做到这一点
答案 0 :(得分:2)
使用lag()
with cte as
(
SELECT id, ((EXTRACT(year FROM age(date,dob)) :: int) * 12) + (EXTRACT(month FROM age(date,dob))) as age FROM exmpleTable
)
select id, case when age=lag(age) over(order by id) then age+1 else age end as ageval
from cte
输出:
id age
1 61
1 62
1 63
2 56
2 57