2011-03-23 80 views
3

好吧,讓我們說我有一個表,看起來像這樣: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

回答

5

我看到它是在查詢無關,我不會把這裏的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

如果你有像(1,2,3,4,5,..)這樣的序列化id,那麼你可以通過這個查詢得到上面的這個查詢,最後再加上1個額外的數據,但是你可以省略那個 下面的是mysql爲結束日期從tester b

相關問題