我有一个经典的间隙和岛屿问题,我需要总计最新记录中最早的日期中的第一个间隙的时间
查看Find Consecutive Date in SQL using 2 date columns,这为我的问题提供了一个非常简洁的解决方案,除了它不适用于 sql server,存在语法错误。
有人有适用于 sql server 的等效解决方案吗?
数据是这样的
参考文献 | TNCY-启动 | TNCY-END |
---|---|---|
1 | 2022-08-22 | 2024-04-22 |
1 | 2019-04-29 | 2022-08-21 |
1 | 2017-06-26 | 2019-04-28 |
1 | 2009-06-29 | 2010-01-31 |
2 | 2020-07-13 | 无效的 |
2 | 2020-05-18 | 2020-07-12 |
2 | 2020-01-13 | 2020-05-17 |
2 | 2010-12-06 | 2016-08-28 |
2 | 2003-09-29 | 2009-06-01 |
3 | 2019-03-25 | 无效的 |
4 | 2022-08-22 | 无效的 |
4 | 2019-04-29 | 2022-08-21 |
4 | 2017-06-26 | 2019-04-28 |
4 | 2009-06-29 | 2010-01-31 |
create table #test ([PERSON-REF] INT,
[TNCY-START] DATE,
[TNCY-END] DATE);
INSERT INTO #test VALUES
('1', '2022-08-22 00:00:00.000', '2024-04-22 00:00:00.000'),
('1', '2019-04-29 00:00:00.000', '2022-08-21 00:00:00.000'),
('1', '2017-06-26 00:00:00.000', '2019-04-28 00:00:00.000'),
('1', '2009-06-29 00:00:00.000', '2010-01-31 00:00:00.000'),
('2', '2020-07-13 00:00:00.000', null),
('2', '2020-05-18 00:00:00.000', '2020-07-12 00:00:00.000'),
('2', '2020-01-13 00:00:00.000', '2020-05-17 00:00:00.000'),
('2', '2010-12-06 00:00:00.000', '2016-08-28 00:00:00.000'),
('2', '2003-09-29 00:00:00.000', '2009-06-01 00:00:00.000'),
('3', '2019-03-25 00:00:00.000', NULL),
('4', '2022-08-22 00:00:00.000', NULL),
('4', '2019-04-29 00:00:00.000', '2022-08-21 00:00:00.000'),
('4', '2017-06-26 00:00:00.000', '2019-04-28 00:00:00.000'),
('4', '2009-06-29 00:00:00.000', '2010-01-31 00:00:00.000')
SELECT * FROM #test;
我想最终得到每个人引用的一行,其中包含人引用、间隙后的记录数、间隙后的开始日期、最晚结束日期(或空)、之间的天数。
例如,假设英国日期格式并将 null 作为今天
参考文献 | 租约数量 | 第一个 TNCY 启动 | 最后一个 TNCY 结束 | 总租赁天数 |
---|---|---|---|---|
1 | 3 | 2017-06-26 | 2024-04-22 | 2492 |
2 | 3 | 2020-01-13 | 无效的 | 第1562章 |
3 | 1 | 2019-03-25 | 无效的 | 1866年 |
4 | 3 | 2017-06-26 | 无效的 | 2493 |
感谢任何人可以提供的帮助