【发布时间】:2022-09-24 01:24:16
【问题描述】:
我有这样的表:
CREATE TABLE Rates
(
RateGroup int NOT NULL,
Rate decimal(5, 2) NOT NULL,
DueDate date NOT NULL
);
此表包含从某个到期日到前一天有效的费率。 下一个到期日。如果不存在下一个到期日,则费率的有效期没有结束。有可以 是多个连续的到期日,利率相同,并且某个可能出现在不同的日期 非连续到期日也是如此。
费率按组划分。一个截止日期可以出现在多个组中,但只能出现在多个组中 每组一次。
这是一些示例数据:
INSERT INTO Rates(RateGroup, Rate, DueDate)
VALUES
(1, 1.2, \'20210101\'), (1, 1.2, \'20210215\'), (1, 1.5, \'20210216\'),
(1, 1.2, \'20210501\'), (2, 3.7, \'20210101\'), (2, 3.7, \'20210215\'),
(2, 3.7, \'20210216\'), (2, 3.7, \'20210501\'), (3, 2.9, \'20210101\'),
(3, 2.5, \'20210215\'), (3, 2.5, \'20210216\'), (3, 2.1, \'20210501\');
| RateGroup | Rate | DueDate |
|---|---|---|
| 1 | 1.20 | 2021-01-01 |
| 1 | 1.20 | 2021-02-15 |
| 1 | 1.50 | 2021-02-16 |
| 1 | 1.20 | 2021-05-01 |
| 2 | 3.70 | 2021-01-01 |
| 2 | 3.70 | 2021-02-15 |
| 2 | 3.70 | 2021-02-16 |
| 2 | 3.70 | 2021-05-01 |
| 3 | 2.90 | 2021-01-01 |
| 3 | 2.50 | 2021-02-15 |
| 3 | 2.50 | 2021-02-16 |
| 3 | 2.10 | 2021-05-01 |
现在我想要一个查询,它将具有相同速率的速率组的多个连续行折叠到 单行包含汇率有效的日期范围(开始和结束日期)。这是 期望的结果:
| RateGroup | Rate | StartDate | EndDate |
|---|---|---|---|
| 1 | 1.20 | 2021-01-01 | 2021-02-15 |
| 1 | 1.50 | 2021-02-16 | 2021-04-30 |
| 1 | 1.20 | 2021-05-01 | NULL |
| 2 | 3.70 | 2021-01-01 | NULL |
| 3 | 2.90 | 2021-01-01 | 2021-02-14 |
| 3 | 2.50 | 2021-02-15 | 2021-04-30 |
| 3 | 2.10 | 2021-05-01 | NULL |
我怎样才能做到这一点?
标签: sql sql-server