获取SQL中同一列中两个日期之间的天数
目标:确定两个交易的生效日期差异大于365天的记录 表格示例:获取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
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。。。?