PostgreSQL中按组划分的行之间的月差

PostgreSQL中按组划分的行之间的月差,sql,postgresql,Sql,Postgresql,我使用PostgreSQL得到的数据如下所示 customer name order_id order_date John A001 1-Jan-2017 John A002 1-Feb-2017 John A003 1-Apr-2017 Smith A004

我使用PostgreSQL得到的数据如下所示

customer name       order_id         order_date
John                A001             1-Jan-2017
John                A002             1-Feb-2017
John                A003             1-Apr-2017
Smith               A004             1-Dec-2016
Smith               A005             1-Feb-2017
Jane                A006             1-Mar-2017
Dave                A007             1-Feb-2017
Dave                A008             1-Feb-2017
Dave                A009             1-Feb-2017
我试图在另一个专栏中得到回购月份之间的差异。像这样

customer name       order_id         order_date        month_diff
John                A001             1-Jan-2017        null
John                A002             1-Feb-2017        1
John                A003             1-Apr-2017        2
Smith               A004             1-Dec-2016        null
Smith               A005             1-Feb-2017        3
Jane                A006             1-Mar-2017        null
Dave                A007             1-Feb-2017        null
Dave                A008             1-Feb-2017        0
Dave                A009             1-Feb-2017        0
任何建议都将不胜感激。我是postgreSQL的新手。提前感谢您

第一个\u值:

第一个值:


如果订单日期正确定义为日期,则可以使用窗口函数轻松完成此操作


请注意,如果订单日期是日期,则差异的结果以天为单位

如果订单日期正确定义为日期,则可以使用窗口函数轻松完成此操作

请注意,如果订单日期是日期,则差异的结果以天为单位

试试这个:

select
t.customer,
t.order_id,
t.order_date,
(select extract(MONTH from t.order_date) - extract(MONTH from tt.order_date) 
    from your_table tt
    where tt.order_id < t.order_id
    order by tt.order_id desc limit 1
)
from your_table t
order by t.order_id
试试这个:

select
t.customer,
t.order_id,
t.order_date,
(select extract(MONTH from t.order_date) - extract(MONTH from tt.order_date) 
    from your_table tt
    where tt.order_id < t.order_id
    order by tt.order_id desc limit 1
)
from your_table t
order by t.order_id

什么是order_date列类型?使用带明显分隔符的plase put数据集或更好的用法来构建schemait的a TIMESTAMP什么是order_date列类型?使用带明显分隔符的plase put数据集或更好的用法来构建schemait的a TIMESTAMP如果总是月的第一天,那么他可以像这样获得月差:select从年龄中提取“月”至2017年4月1日、“D-Mon-YYYY”至2016年12月1日,“D-Mon-YYYY”如果总是每月的第一天,则他可以获得如下月差:选择从年龄中提取“月”至2017年4月1日、“D-Mon-YYYY”至2016年12月1日、“D-Mon-yyyyy”
select
t.customer,
t.order_id,
t.order_date,
(select extract(MONTH from t.order_date) - extract(MONTH from tt.order_date) 
    from your_table tt
    where tt.order_id < t.order_id
    order by tt.order_id desc limit 1
)
from your_table t
order by t.order_id