【发布时间】:2021-04-22 13:24:55
【问题描述】:
我有一张表如下:(没有周末排除逻辑的预期结果)
| Start Date | End Date(Expected Date) | No of Days(input) |
|---|---|---|
| 01-01-2021 | 02-01-2021 | 2 |
| 03-01-2021 | 08-01-2021 | 5 |
| 09-01-2021 | 10-01-2021 | 2 |
| 11-01-2021 | 20-01-2021 | 10 |
| 21-01-2021 | 09-02-2021 | 20 |
| 10-02-2021 | 10-02-2021 | 1 |
我想根据NumberOfDays 值重新生成StartDate 和EndDate 数据,并根据前一行的EndDate + 1 day 为后续行重新生成StartDate,在这个序列中,我需要也排除周末日期,我还有另一种情况可以根据情况包括周末日期。
我想应用此逻辑并使用 SQL Server 在同一选择查询中选择数据。
这是我尝试过的
declare @t table ( StartDate date, EndDate date, DaysToAdd int );
insert into @t(StartDate, EndDate, DaysToAdd)
values('20210217', '20210227', 10), ('20210312', '20210310', 10), ('20210326', '20210401', 10), ('20210409', '20210401', 10), ('20210507', '20210401', 10), ('20210606', '20210529', 10), ('20210618', '20210417', 3), ('20210620', '20210309', 2), ('20300913', '20210227', 2), (null, '20300914', 4);
select * from @t
select dateadd(day, -DaysToAdd-1+count(*) over(order by isnull(StartDate, EndDate), EndDate) + sum(DaysToAdd) over(order by isnull(StartDate, EndDate), EndDate), min(StartDate) over()) as NewStartDate, dateadd(day, -1+count(*) over(order by isnull(StartDate, EndDate), EndDate) + sum(DaysToAdd) over(order by isnull(StartDate, EndDate), EndDate), min(StartDate) over()) as NewEndDate, * from @t;
我的预期结果:
| Start Date | End Date(Expected Date) | No of Days(input) |
|---|---|---|
| 01-01-2021 | 04-01-2021 | 2 |
| 05-01-2021 | 11-01-2021 | 5 |
| 12-01-2021 | 13-01-2021 | 2 |
| 14-01-2021 | 27-01-2021 | 10 |
| 28-01-2021 | 24-02-2021 | 20 |
| 25-02-2021 | 25-02-2021 | 1 |
【问题讨论】:
-
请与我们分享您的尝试
-
还有其他列可以订购吗?像主键一样?您要求更改
StartDate和EndDate的值。然后,您将如何确定处理行的顺序? -
我在排序顺序中有另一列根据此列进行排序。
-
向我们展示您的预期结果将有助于我们为您提供帮助。
-
@Larnu,以上表格格式结果需要我
标签: sql-server sorting lead