2016-03-04 68 views
1

我有一個用戶表與INT格式(年月日),如下的日期範圍沿:SQL:如何從給定的一組日期範圍中找到唯一的日期範圍?

Id Name StartDate EndDate 
1 abc  20160216 20160217 
1 abc  20160228 20160228 
1 abc  20160301 20160301 
1 abc  20160301 20160302 
1 abc  20160301 20170401 
1 abc  20160302 20160302 
1 abc  20160303 20160303 
1 abc  20160303 20170401 
3 def  20160217 20160217 
3 def  20160218 20160229 
3 def  20160218 20160229 
3 def  20160225 20160225 
3 def  20160229 20160229 
3 def  20160302 20160302 

我需要找到獨特的連續日期範圍爲每一位用戶(沒有任何重複)。輸出應該喜歡這個

Id Name StartDate EndDate 
1 abc  20160216 20160217 
1 abc  20160228 20160228 
1 abc  20160301 20170401 
3 def  20160217 20160229 
3 def  20160302 20160302 

有了這個腳本,您可以創建表:

CREATE TABLE #data 
(
Id INT, 
Name VARCHAR(50), 
StartDate INT, 
EndDate INT, 
) 
INSERT INTO #data VALUES(1,'abc',20160216,20160217) 
INSERT INTO #data VALUES(1,'abc',20160228,20160228) 
INSERT INTO #data VALUES(1,'abc',20160301,20160301) 
INSERT INTO #data VALUES(1,'abc',20160301,20160302) 
INSERT INTO #data VALUES(1,'abc',20160301,20170401) 
INSERT INTO #data VALUES(1,'abc',20160302,20160302) 
INSERT INTO #data VALUES(1,'abc',20160303,20160303) 
INSERT INTO #data VALUES(1,'abc',20160303,20170401) 
INSERT INTO #data VALUES(3,'def',20160217,20160217) 
INSERT INTO #data VALUES(3,'def',20160218,20160229) 
INSERT INTO #data VALUES(3,'def',20160218,20160229) 
INSERT INTO #data VALUES(3,'def',20160225,20160225) 
INSERT INTO #data VALUES(3,'def',20160229,20160229) 
INSERT INTO #data VALUES(3,'def',20160302,20160302) 

編輯: 總之,如果我有數據這樣

Id Name StartDate EndDate 
1 abc  20160216 20160217 
**1 abc  20160301 20160302 
1 abc  20160301 20160303** 

我需要輸出如下所示。

Id Name StartDate EndDate 
1 abc  20160216 20160217 
**1 abc  20160301 20160303** 
+0

你能告訴你在試圖做到這一點有什麼碼這麼遠? – Matthew

+0

如果我使用'select distinct',它會返回更多謝謝您的預期輸出。看看你的輸入和你想輸出的東西,你的問題沒有意義。請解釋一下「每個用戶的連續唯一日期範圍」是什麼意思,通過解釋您的預期輸出或更新您的預期輸出以匹配實際獲得的樣本數據。 – jkdba

+0

我編輯了我的問題。用戶有兩個日期範圍March1-March2和March1-March3。我只想要March1-March3,因爲March1-March2是March1-March3的一部分, –

回答

1

猜我需要使用SELECT DISTINCT,它只搜索表格列中的唯一值。

這是你在找什麼?我沒有得到你想要的輸出...

1

你應該能夠連接StartDate和EndDate,並找出不同的concate值。

select id, StartDate, EndDate, distinct(contactDate) from (Select id, StartDate, EndDate, CONCAT_WS('', StartDate, EndDate) AS concatDate from Data) 

編輯

其實我覺得你可以不用concating以及...

Select id, StartDate, EndDate, distinct(StartDate, EndDate) from data 
+1

你的語法對於sql-server中的distinct是不正確的 – jkdba

+0

啊......我在MySQL中寫下了對不起 –

+0

沒問題,只是讓你懂。 – jkdba