我有一个表格如下
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
“日期”每个月都是唯一的。所以 2 个日期不会出现在同一个月内。 现在我需要如下结果
id | age
----------+------------
1 | 61
1 | 62
1 | 63
2 | 56
2 | 57
逻辑:
要么
1)如果计算出来的年龄和上面一样,加一(我不知道怎么用lag)
或
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
关于sql - 如果与前一列匹配,PostgreSQL 将年龄加一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55371731/