【发布时间】:2021-09-20 11:49:04
【问题描述】:
我有这个 SQL Server 表 table1,我想在每个帐户中填充虚拟行,直到最近的上个月结束日期,例如现在最多 2021 年 6 月 30 日。
在此示例中,帐户 1 有 n 行,在 2020-05-31 结束,我想插入具有相同值的虚拟行 acct 和 amt begin_date 和 end_date 递增到 2021 年 6 月 30 日为止的 1 个月。
假设acct 2 已经在 06-30-2021 结束,因此不需要插入虚拟行。
acct,amt,begin_date,end_date
1 , 10, 2020-04-01, 2020-04-30
1 , 10, 2020-05-01, 2020-05-31
2 , 50, 2021-05-01, 2021-05-31
2 , 50, 2021-06-01, 2021-06-30
因此,对于帐户 1,我希望从 2020 年 5 月 31 日的最后一个时期到上个月末(现在是 2021 年 6 月 30 日)插入 n 行,并且我希望 amt 和帐户保持不变。所以它看起来像下面这样:
acct,amt,begin_date,end_date
1 , 10, 2020-04-01, 2020-04-30
1 , 10, 2020-05-01, 2020-05-31
1 , 10, 2020-06-01, 2020-06-30
1 , 10, 2020-07-01, 2020-07-31
.............................
.............................
1 , 10, 2021-06-01, 2021-06-30
基于一些数据分析,我意识到我需要另一个条件来解决问题。假设在table1 中添加了另一列type。所以acct 和type 将是标识每个相关行的复合键,因此acct 2 type A 和acct 2 type B 不相关。所以我们有了更新的表格:
acct,type,amt,begin_date,end_date
1, A, 10, 2020-04-01, 2020-04-30
1, A, 10, 2020-05-01, 2020-05-31
2, A, 50, 2021-05-01, 2021-05-31
2, A, 50, 2021-06-01, 2021-06-30
2, B, 50, 2021-01-01, 2021-01-31
2, B, 50, 2021-02-01, 2021-02-28
我现在需要在 2021 年 6 月 30 日之前为账户 2 类型 B 创建虚拟行。我们已经知道 acct 2 type A 是可以的,因为它已经有到 2021-06-30 的行
【问题讨论】:
-
请阅读this,了解一些改进问题的技巧。 DDL 帮助我们帮助您,例如我们应该猜测“日期”是什么数据类型?你试过什么?
标签: sql-server tsql stored-procedures database-design user-defined-functions