【发布时间】:2017-03-12 08:02:37
【问题描述】:
我有一个要求,我需要合并连续的并且属于某种类型的组和少数其他条件的记录。
- 列表项
要合并记录——我们应该认为它只有从主组开始才连续,所以这里的第一个记录应该被视为个体,即使它是连续的
- 列表项
如果不作为主组结束,则不要合并,
- 列表项
如果有一天的差距,那就不要合并
MemberName Group StartDate EndDAte
Priya Sub 01/01/2017 01/20/2017 --Do not merge,not started in Main
Priya Main 01/20/2017 01/30/2017 --merge
Priya Sub 01/30/2017 02/05/2017 --merge
Priya Main 02/06/2017 02/06/2017 --Do not merge,Break
Priya sub 02/07/2017 02/15/2017 --Do not merge,not started in Main
Priya Main 02/15/2017 02/20/2017 --Merge
Priya Main 02/20/2017 02/25/2017 --Do not merge,Break
Priya sub 02/28/2017 02/28/2017 --Do not merge,break also did not end as Main
输出应如下所示:
MemberName Group StartDate EndDAte
Priya Sub 01/01/2017 01/20/2017
Priya Main 01/20/2017 02/05/2017
Priya Main 02/06/2017 02/06/2017
Priya sub 02/07/2017 02/15/2017
Priya Main 02/15/2017 02/25/2017
Priya sub 02/28/2017 02/28/2017
我必须在这里使用 If-while 循环。
【问题讨论】:
-
那么你的问题是什么?到目前为止你做了什么?使用 while 循环,这样做应该很简单。您也可以使用窗口函数,但这会复杂得多。
-
我想我理解您所说的“如果它不以主要组结尾,则不要合并”的意思,但您能否通过其他示例说明此标准?。
-
@james Z,我使用了临时表并导出了输出,但感觉巨大且效率低下,我想使用循环,但我对 SQL 中的循环概念很陌生,请你帮我写循环
-
@SqlZim 我的意思是如果最后有差距我的意思是我们不应该加入它。
标签: sql sql-server tsql merge gaps-and-islands