SQL查询创建开始和结束日期

问题描述:

好吧,让我们说我有一个表,看起来像这样:SQL查询创建开始和结束日期

ID | DATE 
2 | 2010-08-12 
2 | 2010-08-16 
2 | 2010-08-17 
2 | 2010-12-21 
2 | 2010-12-22 
2 | 2011-05-25 

人对如何以这样的数据看起来像

ID | STARTDATE | ENDDATE 
2 | 2010-08-12 | 2010-08-15 
2 | 2010-08-16 | 2010-08-16 
2 | 2010-08-17 | 2010-12-20 
2 | 2010-12-21 | 2010-12-21 
2 | 2010-12-22 | 2010-05-25 
+2

你是如何计算的终止日期 - 查询

SELECT开始日期,(从tester间隔1天,其中a.id = b.id +1选择开始日期)?编辑:我想我明白了;是第三个EndDate应该是2010-12-20,而不是2010-08-20? – Bleaourgh 2011-03-23 17:13:40

+0

^:它刚刚在新的开始日期 – 2011-03-23 17:14:22

+0

我的不好,固定那第三个 – James 2011-03-23 17:16:09

我看到它是在查询无关,我不会把这里的ID。如果你希望你以后再说。这是一个MSSQL查询。

select tb1.date as startdate,dateadd(d,-1,tb2.date) as enddate 
from the_table tb1 
join the_table tb2 on tb2.date>tb1.date 
left join the_table tb3 on tb1.date<tb3.date and tb3.date<tb2.date 
where tb3.date is null 

它可以很容易地翻译为其他数据库类型。

+0

对于一些场景,这实际上是一种非常有用的方法。很酷。 – 2011-03-25 11:09:45

查询它的想法

这两个链接会给你一个粗略的想法。

如果你有像(1,2,3,4,5,..)这样的序列化id,那么你可以通过这个查询得到上面的这个查询,最后再加上1个额外的数据,但是你可以省略那个 下面的是mysql为结束日期从tester b