sql - 如果与前一列匹配,PostgreSQL 将年龄加一

标签 sql postgresql

我有一个表格如下

    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()

DEMO

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/

相关文章:

java - 有几个条件的 JPA 查询?

sql - 通过多个连接、分组依据和排序依据加快查询速度

postgresql - 为连接表查找(更大的)最接近的值

django - 将数据库从本地 django 迁移到 heroku

java - hibernate 一对一映射不更新子表

php - 如果至少其中一行具有给定值,则选择具有给定 ID 的所有行

mysql - 如何找到层次树中的所有子节点

mysql - Sql如何从多列中查找重复记录

sql - 什么 SQL 查询或 View 将显示 "dynamic columns"

postgresql - 用户不是 super 管理员和大对象的 pg_dump