有一个格式表
| ID | 最低限度 | 最大限度 |
|---|---|---|
| 01 | 01/01/2000 | 03/03/2000 |
| 02 | 02/02/2001 | 05/11/2001 |
有必要制作一个包含日期列表的表格,每个 id 从最小值到最大值按月计算。因此日期是该月的最后一天。类型:
| ID | 日期 |
|---|---|
| 01 | 01/31/2000 |
| 01 | 02/28/2000 |
| 01 | 03/31/2000 |
| 02 | 02/28/2001 |
| 02 | 03/31/2001 |
| 02 | 04/30/2001 |
| 02 | 05/31/2001 |
类似于循环:对于每个 id,以 1 个月为增量添加一个日期,而日期小于最大值
我损坏的代码:
WITH t AS(
select id, EOMONTH(Минимум) AS min_v, Минимум, Максимум
from my_table
UNION ALL
SELECT id, EOMONTH(DATEADD(m, 1, d)), Минимум, Максимум
FROM t
WHERE EOMONTH(Минимум) <= Максимум)
写入错误“将值添加到‘日期’列导致溢出”
我会稍微更正您的代码。否则,你会得到一个无限递归或溢出,这是之前的。
该条件是必要的
WHERE EOMONTH(d) < Максимум),因为相比之下d- 来自上一次迭代。这是另一个版本,几乎相同: