0
說,我有一個表的「開始」日期計算時間範圍由起始日期
ID Start
1 null
2 2001-1-1
3 2002-1-1
現在,我需要計算有效時間範圍爲一個有效的方式,每個記錄:
ID Start Finish
1 null 2000-12-31
2 2001-1-1 2001-12-31
3 2002-1-1 null
說,我有一個表的「開始」日期計算時間範圍由起始日期
ID Start
1 null
2 2001-1-1
3 2002-1-1
現在,我需要計算有效時間範圍爲一個有效的方式,每個記錄:
ID Start Finish
1 null 2000-12-31
2 2001-1-1 2001-12-31
3 2002-1-1 null
使用鉛:
create table #dates
(
ID int,
Start date
)
insert into #dates values(1,null),(2,'01-jan-2001'),(3,'01-jan-2002')
select ID,
Start,
DATEADD(DD, -1, LEAD(Start,1) over (order by Start)) AS Finish
from #dates
使用JOIN
。
查詢
select t1.[ID], t1.[Start],
dateadd(day, -1, t2.[Start]) as [Finish]
from [your_table_name] t1
left join [your_table_name] t2
on t1.ID = t2.ID - 1;
由於哈勃提到的,如果ID不正確的順序。然後按ID
列給出行號排序。
查詢
;with cte as(
select [row_num] = row_number() over(
order by [ID]
),*
from [your_table_name]
)
select t1.[ID], t1.[Start],
dateadd(day, -1, t2.[Start]) as [Finish]
from cte t1
left join cte t2
on t1.[row_num] = t2.[row_num] - 1;
這是值得注意的,這需要'ID'值保持密集。 – HABO