【发布时间】:2011-11-02 23:47:24
【问题描述】:
我正在努力创建一个查询来汇总日期范围,同时按两个字段连续分组 - 基本上我正在尝试改变这个:
|Key|Valid|DateFrom |DateTo |
| 1| 0|2001-01-01|2001-01-31|
| 1| 0|2001-02-01|2001-02-20|
| 1| 1|2001-02-21|2001-02-28|
| 1| 0|2001-03-01|2001-03-15|
| 2| 1|2001-01-01|2001-01-31|
| 2| 0|2001-02-01|2001-02-20|
| 2| 0|2001-02-21|2001-02-28|
| 2| 1|2001-03-01|2001-03-15|
进入这个:
|Key|Valid|DateFrom |DateTo |
| 1| 0|2001-01-01|2001-02-20|
| 1| 1|2001-02-21|2001-02-28|
| 1| 0|2001-03-01|2001-03-15|
| 2| 1|2001-01-01|2001-01-31|
| 2| 0|2001-02-01|2001-02-28|
| 2| 1|2001-03-01|2001-03-15|
自然地,一个简单的 min(DateFrom), max(DateTo) group by Key, Valid 不起作用,因为它不尊重日期范围的时间顺序。需要注意的是,每个键和有效组内的日期范围没有间隔。
我已经广泛搜索了解决方案(在这里和网络上的其他地方),并找到了很多使用 OVER 和 CTE 对日期进行分组的解决方案(都尝试过),但我认为问题在于我正在尝试因素在两个不同的组。我也尝试将范围转换为单独的日期,但我似乎无法将它们按时间顺序按两组汇总。
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
您的源数据中是否存在任何空白或重叠?
-
您可以使用任何提供的解决方案吗?
-
是的,现在回答了 - 感谢大家的建议 - 非常感谢
标签: sql sql-server-2008 tsql