2016-03-07 68 views
0

对于给定的ID,我有一系列的START_DATE。除了显示其他专栏之外,我还想添加一个新的专栏,以便查找某个ID(个人)的START_DATE和他下一个START_DATE之间的差异。添加一个计算日期直到下一个事件的列

基本上,希望找到他现在的START_DATE和他下一个START_DATE之间的时间间隔,并显示其他列。

例如,数据显示如下 enter image description here

我试着这样做如下:

SELECT t.Id,t.START_DATE,(select top 1 s.START_DATE from dbo.MyTable t INNER JOIN dbo.MyTable s ON(t.Id = s.Id and t.START_DATE > s.START_DATE) GROUP BY t.patient_Id,t.START_DATE) 
+0

什么版本的SQL服务器您使用的是? – Balah

回答

1

我觉得这是你所需要的

SELECT t.Id,t.START_DATE, 
     DATEDIFF(day,(select min(s.START_DATE) from dbo.MyTable s 
        where t.Id = s.Id and t.START_DATE < s.START_DATE), 
       t.start_date) as DifferenceInDays 
FROM dbo.MyTable t 

这会给你(如果你愿意的话,可以在几天之内更改)每个日期和下一个日期之间的差异

+0

谢谢,能够在几天内得到它。 – PepperBoy

1

如果您的SQL Server版本支持它,那么你可以通过这样的LEAD窗口函数做到这一点:

SELECT 
    id, 
    start_date, 
    DATEDIFF(DAY, start_date, LEAD(start_date, 1) OVER (PARTITION BY id ORDER BY start_date)) AS days_until_next_start_date 
FROM 
    dbo.My_Table