如何在sql中使用date diff获得这样的结果
如何使用日期差异功能从ColA和ColB中获取ResultCol?以下是一种使用CTE的方法:如何在sql中使用date diff获得这样的结果,sql,Sql,如何使用日期差异功能从ColA和ColB中获取ResultCol?以下是一种使用CTE的方法: 大多数数据库支持ANSI标准lag函数。这似乎正是您想要的: ;With Cte As ( Select *, Row_Number() Over (Partition By ColA Order By ColB Asc) Row From YourTable ) Select A.ColA, A.ColB, Coalesce(DateDiff(Day, B.ColB
大多数数据库支持ANSI标准lag函数。这似乎正是您想要的:
;With Cte As
(
Select *, Row_Number() Over (Partition By ColA Order By ColB Asc) Row
From YourTable
)
Select A.ColA, A.ColB, Coalesce(DateDiff(Day, B.ColB, A.ColB), 0) ResultCol
From Cte A
Left Join Cte B On A.ColA = B.ColA
And A.Row = B.Row + 1
Order By A.ColA Asc, A.ColB Asc
我不确定你使用的是哪个数据库;这将使用SQL Server函数datediff。其他数据库也有类似的功能。您能再详细说明一下吗?您到底想在RESULTCol中得到什么?请描述您已经尝试过的内容。那么您使用的是哪种DBMS?这不是完整的问题,如何将datediff分为两列,直到两列都有日期?你有colA作为文本列吗?我试图根据colA处的值得到两行之间的日期差。我使用的是sql server。第一个值始终从0开始,第二个值将是当前日期值和前一行日期值,但它取决于colA的值。谢谢
;With Cte As
(
Select *, Row_Number() Over (Partition By ColA Order By ColB Asc) Row
From YourTable
)
Select A.ColA, A.ColB, Coalesce(DateDiff(Day, B.ColB, A.ColB), 0) ResultCol
From Cte A
Left Join Cte B On A.ColA = B.ColA
And A.Row = B.Row + 1
Order By A.ColA Asc, A.ColB Asc
select IDCode, DateValue,
coalesce(datediff(day, lag(DateValue) over (partition by IDCode order by DateValue),
DateValue),
0)
from taable t;