我正在将源表中的记录和列的子集导入本地表。我正在尝试折叠数据,以便我可以在我的表中拥有唯一的行,但前提是日期范围是连续的。我遇到了麻烦,因为我不知道如何进行分组,这样我就不会跳过日期范围。以下是一些示例数据:
|PID | GroupID | Data | StartDate | EndDate
| 12 | 1 | 4 | 45 | 50
| 11 | 1 | 5 | 40 | 45
| 10 | 1 | 5 | 35 | 40
| 9 | 1 | 4 | 30 | 35
| 8 | 2 | 5 | 25 | 50
| 7 | 1 | 4 | 25 | 30
| 6 | 1 | 4 | 20 | 25
| 5 | 1 | 2 | 15 | 20
| 4 | 1 | 3 | 10 | 15
| 3 | 1 | 3 | 5 | 10
| 2 | 2 | 1 | 1 | 25
| 1 | 1 | 2 | 1 | 5
我试图得到这个结果:
|GroupID | HistoryID | Data | StartDate | EndDate
| 1 | 1 | 4 | 45 | 50
| 1 | 2 | 5 | 35 | 45
| 1 | 3 | 4 | 20 | 35
| 1 | 4 | 2 | 15 | 20
| 1 | 5 | 3 | 5 | 15
| 1 | 6 | 2 | 1 | 5
| 2 | 1 | 5 | 25 | 50
| 2 | 2 | 1 | 1 | 25
所以想象有数千个组 id,data
列实际上是多列,开始/结束日期是实际日期。
我试图做的是某种解决方案,通过自我加入startDate
和endDate
比较数据,或者对数据进行某种partion by groupid
和分组。然后取最小值startDate
和最大值endDate
。但是,我想不出一种方法来使数据 4 不会从 20 startdate 到 50 enddate 并与数据 5 的日期范围重叠。
我知道在 Sql Server 2012 中有用于前瞻行和运行总计的新内容,但我正在 Sql Server 2008 中实施。有什么想法吗?