如何在sql中使用date diff获得这样的结果

如何在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

如何使用日期差异功能从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, 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;