我有如下数据
create table #Temp(Id int, FromDate date, ToDate date)
Insert into #Temp
values(1,'9/1/2019','9/1/2019'),
(2,'9/2/2019','9/3/2019'),
(3,'9/2/2019','9/3/2019'),
(4,'9/4/2019','9/6/2019'),
(5,'9/7/2019','9/7/2019')我试着计算差异并创建日,比如第一天,第二天-第三天……
预期结果
Id FromDate ToDate Display
1 01/09/2019 01/09/2019 Day 1
2 02/09/2019 03/09/2019 Day 2-3
3 02/09/2019 03/09/2019 Day 2-3
4 04/09/2019 06/09/2019 Day 4-6
5 07/09/2019 07/09/2019 Day 7我尝试过使用datediff编写下面的代码,但不确定如何与上一行关联并获取日期范围。
select *, DATEDIFF(DAY,FromDate,ToDate)
from #Temp发布于 2019-10-23 13:49:18
使用first_value
select *
, datediff(day, first_value(FromDate) over(order by FromDate), FromDate) + 1
, datediff(day, first_value(FromDate) over(order by FromDate), ToDate) + 1
from #Temp发布于 2019-10-23 13:56:25
如果您想要完全相同的输出,可以尝试这样做。
Select
* ,
case
when (FromDate != ToDate)
then
'Day '+ DATEPART(Day,FromDate) + '-' + DATEPART(Day,ToDate)
else
'Day '+ DATEPART(Day,FromDate)
END AS Display
From #Temp发布于 2019-10-23 13:51:02
您不需要上一行的值,而是想要最早的从日期开始,然后可以将其与每一行进行比较。
select id, min (fromdate) over (order by fromdate asc) as earliest_date,fromDate,todate,
datediff(day,min (fromdate) over (order by fromdate asc),fromdate)+1,
datediff(day,min (fromdate) over (order by fromdate asc),todate)+1
from
#temphttps://stackoverflow.com/questions/58524246
复制相似问题