2015-07-01 36 views
0

下午好(它在佛羅里達州)。SQL Server - 使用兩個日期獲取不同的值

我在SQL Server中的表具有以下數據:

id StartDate  EndDate  
---- ------------ ------------ 
1 2015-06-30 2015-07-30 
2 2015-08-01 2015-08-31 
3 2015-08-01 2015-12-31 
4 2015-09-01 2015-09-30 
5 2015-10-01 2015-12-31 

我需要一個「獨立的」 select語句,我抓住所有,但創紀錄的3,因爲它與其他日期重疊。

這樣做的最好方法是什麼?我曾試過聯盟,但那不起作用。

任何幫助表示讚賞!

編輯:我的預期產出將需要看起來像這樣:

+============+============+ 
|  SD  |  ED  | 
| 2015-06-30 | 2015-07-30 | 
+------------+------------+ 
| 2015-08-01 | 2015-08-31 | 
+------------+------------+ 
| 2015-09-01 | 2015-09-30 | 
+------------+------------+ 
| 2015-10-01 | 2015-12-31 | 
+------------+------------+ 

我想排除有有開始日期等於在表中的另一個開始日期的日期範圍的行以及結束日期與其他日期範圍一致。這就是爲什麼第3行不應該在結果集中。

謝謝!

+3

您應該添加到您的問題更多的規則何時排除行。例如,如果兩個記錄具有相同的開始日期,您是否認爲它重疊?如果一個日期落在另一個日期範圍的開始日期和結束日期之間,那麼哪一個排除?有沒有重疊鏈? –

+0

與@BrianPressler說的一樣,你的預期產出會有所幫助。 – Khan

+0

@Khan *選擇聲明,我抓住所有,但記錄3 *所以它的記錄1,2,4和5 –

回答

2

如果你只是想在最短的時間範圍爲StartDate每一個獨特的價值,那麼你可以在StartDate使用GROUP BY和設置EndDateMin

Select StartDate, Min(EndDate) EndDate 
From TableDates 
Group by StartDate 
+0

這就像是太容易了,但是他的確如他所說 – Paparazzi

+0

差不多,我需要擺脫2015-08-01/2015-12-31的範圍,並保持2015-08-01/2015-08-31 –

+0

然後你想使用Min聚合函數。 (編輯答案) –

1

嘗試此查詢

Select a.Stard_Date as sd, min(a.End_date) as ed 
from tablename a group by a.Stard_Date 
相關問題