Sql server 如何从日期列表创建日期范围

Sql server 如何从日期列表创建日期范围,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我试着寻找我问题的答案,但是前面提到的所有场景都略有不同。如果我错过了一个能回答这个问题的,我道歉 我有一张这样的桌子: ID Date 35 2015-06-01 35 2015-06-02 35 2015-06-03 35 2015-06-06 40 2015-06-07 40 2015-06-08 40 2015-06-09 40 2015-06-10 40 2015-06-13 35 2015-06-14 35 2015-06-15 35 2015-06-

我试着寻找我问题的答案,但是前面提到的所有场景都略有不同。如果我错过了一个能回答这个问题的,我道歉

我有一张这样的桌子:

ID     Date
35  2015-06-01
35  2015-06-02
35  2015-06-03
35  2015-06-06
40  2015-06-07
40  2015-06-08
40  2015-06-09
40  2015-06-10
40  2015-06-13
35  2015-06-14
35  2015-06-15
35  2015-06-16
35  2015-06-17
我想把它写在以下表格中:

ID   DateFrom      DateTo
35  2015-06-01    2015-06-07
40  2015-06-07    2015-06-14
35  2015-06-14    2015-06-18
然而,我能想到的或见过的每个解决方案(row_number()、min/max、lag等)都只返回以下结果

ID   DateFrom      DateTo
35  2015-06-01    2015-06-18
40  2015-06-07    2015-06-14
i、 e ID 35的日期范围取第一个表中日期的最小值和最大值。看起来这应该很容易,但我完全被卡住了

谢谢


Tom

您可以使用
行数
最小值
最大值
执行此操作:

结果

| ID |   DateFrom |     DateTo |
|----|------------|------------|
| 35 | 2015-06-01 | 2015-06-06 |
| 40 | 2015-06-07 | 2015-06-13 |
| 35 | 2015-06-14 | 2015-06-17 |

第一行的
DateTo
不是应该是
2015-06-30
?这是mysql还是sql server?这会对方法产生影响。例如,这个链接向您展示了如何检查下一个值:如果您想要连续ID的日期范围,我认为您需要这样做。是否所有ID 35都有四行,而所有40都有五行?为什么您想要更改ID的第一个日期?太棒了!这太完美了。感谢Felix这不仅解释了构建日期范围,还解释了其他数据范围。
| ID |   DateFrom |     DateTo |
|----|------------|------------|
| 35 | 2015-06-01 | 2015-06-06 |
| 40 | 2015-06-07 | 2015-06-13 |
| 35 | 2015-06-14 | 2015-06-17 |