在一个表列中逐行减法查找SQL Server中的值

时间:2017-10-10 11:52:16

标签: sql sql-server tsql

id  patient_date            
1   10/5/2017           
2   6/6/2017            
3   6/10/2017           
4   8/7/2017            
5   9/19/2017           

输出:

id   patient_date      days     
1   10/5/2017        (6/6/2017-10/5/2017)       
2   6/6/2017         (6/10/2017-6/6/2017)       
3   6/10/2017        (8/7/2017-6/10/2017)       
4   8/7/2017         (9/19/2017-8/7/2017)       
5   9/19/2017           

2 个答案:

答案 0 :(得分:1)

此处带有额外列的查询供您选择:)

{{1}}

答案 1 :(得分:0)

你可以试试这个。这将使用lead来查找您的下一个值。最后一个值应为null或无,根据需要进行更正。 1900-01-01的日期应更改为您希望的愿望。它也可以是NULL值。然后它不会计算最后一行。

 DECLARE @table TABLE (ID int,Patient_date date)
 INSERT INTO @table VALUES

 (1, '10/5/2017'),
 (2,'6/6/2017'),
 (3,'6/10/2017'),
 (4,'8/7/2017'),
 (5,'9/19/2017')

 select *,DATEDIFF(DD,Patient_date,NextDate) as DaysBetween, 
'('+cast(Patient_date as varchar(50)) + ' - ' + cast(NextDate  as 
varchar(50))+')' as DayString from (
select *,LEAD(Patient_date,1,'1900-01-01')  over(order by ID ) as NextDate 
from @table
) x

在我的结果中,我使用的是NULL而不是1900-01-01 - 另请注意我使用的是另一种日期格式,但它不应该是一个问题。

<强>结果:

enter image description here