我需要查找定義爲範圍的開始日期和結束日期:開始日期是第一個日期,結束日期是第二個日期,其中後續日期爲兩個月或在結束日期之後更多。可以有多個可能的範圍在非連續範圍內查找開始日期和結束日期
我有這樣一個表結構:
ID int identity(1,1),
fk_ID char(9),
dateField datetime
的數據是這樣的:
1 a 2012-01-01
2 a 2012-01-05
3 a 2012-01-12
4 b 2012-02-01
5 a 2012-04-01
6 b 2012-05-01
7 a 2012-05-30
預期結果會是什麼樣子:
fk_id startdate enddate
a 2012-01-01 2012-01-12
a 2012-04-01 2012-05-30
b 2012-02-01 2012-02-01
b 2012-05-01 null
編輯: 通過執行以下操作:
CREATE TABLE #temp
(
autonum int identity(1,1),
id char(9),
sd datetime
)
insert into #temp (id, sd) values ('a', '2012-01-01')
insert into #temp (id, sd) values ('a', '2012-01-05')
insert into #temp (id, sd) values ('a', '2012-01-12')
insert into #temp (id, sd) values ('a', '2012-03-01')
insert into #temp (id, sd) values ('a', '2012-04-03')
insert into #temp (id, sd) values ('a', '2012-06-06')
insert into #temp (id, sd) values ('b', '2012-02-12')
insert into #temp (id, sd) values ('b', '2012-02-15')
insert into #temp (id, sd) values ('b', '2012-03-01')
insert into #temp (id, sd) values ('b', '2012-04-03')
insert into #temp (id, sd) values ('b', '2012-06-01')
select t1.id, null as previousend, min(t1.sd) as nextstart
from #temp t1
group by t1.id
union
select t1.id, t1.sd as enddate, (select min(t2.sd) from #temp t2 where t1.id=t2.id and t2.sd>t1.sd) as nextstart
from #temp t1
where (select min(t2.sd) from #temp t2 where t1.id=t2.id and t2.sd>t1.sd) >= dateadd(month, 2, t1.sd)
union
select t1.id, max(t1.sd), null
from #temp t1
group by t1.id
drop table #temp
我能得到的輸出是這樣的:
id previousend nextstart
--------- ----------------------- -----------------------
a NULL 2012-01-01 00:00:00.000
a 2012-04-03 00:00:00.000 2012-06-06 00:00:00.000
a 2012-06-06 00:00:00.000 NULL
b NULL 2012-02-12 00:00:00.000
b 2012-06-01 00:00:00.000 NULL
這是非常接近,但理想範圍的開始和結束日期將是對行。
我想你的意思是_...並且結束日期是**開始日期**之後的後續日期是兩個月或更長時間的第一個日期,對嗎? – alf
@alfonso不幸的是,描述是準確的,如果有點混亂。數據示例有望澄清情況。 – spizotfl
您已經在第二組不同的樣本數據中顯示了「非常接近」的內容。你能否在這種情況下顯示你真正想要的結果,而不是用另一個令人困惑的單詞問題模糊地描述它? –