对于给定的ID,我有一系列START_DATE。除了显示其他列之外,我还要添加一个新列,用于查找Id(人物)的START_DATE与其下一个START_DATE之间的差异。
基本上,想要找到他当前的START_DATE和他的下一个START_DATE之间的间隔,以及显示其他列。
我尝试按照以下方式执行此操作:
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 :(得分: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
这会给你(在几天内,你可以改变它,如果你想)每个日期和下一个日期之间的差异
答案 1 :(得分: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