获取SQL中同一列中两个日期之间的天数

获取SQL中同一列中两个日期之间的天数,sql,oracle,date,Sql,Oracle,Date,目标:确定两个交易的生效日期差异大于365天的记录 表格示例: account# Effective_Date 1234 01/01/2020 1234 02/01/2020 1234 03/01/2020 1234 04/01/2021 我想创建一个如下所示的表 account Effective_Date Effective_Date_1 Calculate_Days 1234 01/01/2020

目标:确定两个交易的生效日期差异大于365天的记录

表格示例:

account#    Effective_Date
1234        01/01/2020
1234        02/01/2020
1234        03/01/2020
1234        04/01/2021
我想创建一个如下所示的表

account     Effective_Date  Effective_Date_1   Calculate_Days
1234        01/01/2020                         0  
1234        02/01/2020      01/01/2020         31
1234        03/01/2020      02/01/2020         29
1234        04/01/2021      03/01/2020         395
目标1:在另一列“生效日期”中复制生效日期 目标2:将“生效日期”偏移1行

这在SQL中可能吗?

使用
lag()
。在SQL Server中,这看起来像:

select t.*,
       datediff(day, lag(effective_date), effective_date) as num_days
from t;
注意:这将返回第一行的
NULL
。如果您真的想要
0
,那么三参数表单非常方便:

select t.*,
       datediff(day, lag(effective_date, 1, effective_date), effective_date) as num_days
from t;

lag语句必须与over()一起使用,并在其中按顺序排列

select t.*
    ,lag(Effective_Date) over(order by Effective_Date)
    ,datediff(day, lag(Effective_Date) over(order by Effective_Date) , Effective_Date)
from (
    select  1234  as account#      ,'01/01/2020' as Effective_Date
    union
    select  1234  as account#      ,'02/01/2020' as Effective_Date
    union
    select  1234  as account#      ,'03/01/2020' as Effective_Date
    union
    select  1234  as account#      ,'04/01/2021' as Effective_Date
) t

是的。您使用的是什么数据库管理系统?这在具有
LAG
功能的现代DBMS中非常简单。使用
LAG()
功能。请用正在运行的数据库标记您的问题:mysql、oracle、sqlserver。。。?