2012-01-23 46 views
0

我有一個表SELECT查詢

ID | DATE 
1 | 16-01-2012 
2 | 17-01-2012 
3 | 18-01-2012 
4 | 22-01-2012 
5 | 28-01-2012 
6 | 02-02-2012 

我的任務是:

我有一個date變量,它被初始化爲16-01-2012,我必須要找到它們在連續與16-01-2012所有行即17-01-201218-01-2012

請幫忙。

回答

6

一種可能性是使用hierarchical query類似如下:

with data (id, date) 
as 
(
    select id, date from yourtable where date = '16-01-2012' 
    UNION ALL 
    select t.id, t.date 
    from yourtable t 
    inner join data d 
     on DATEDIFF(dd, d.date, t.date) = 1 
    -- 1 day difference 
) 
select 
    * 
from 
    data 
; 

我沒有一個SQL服務器在這裏嘗試了這一點,所以有可能是聲明中的一些錯誤。它應該給你一個想法。

+2

DATEDIFF(dd,t.Date,d.Date)= -1 –

+0

@AdrianIftode:謝謝。 SQL服務器中不是簡單的減法工作嗎? –

+0

不,你的代碼工作正常,但減法沒有。 –

-1

試試這個:

select id, date 
from table 
where date > date_from_variable 

唯一覺得你有噴氣做的,就是你的變量轉換爲正確的日期格式。

樣本:

cast(date_from_variable, smalldate) 
+0

-1:這將返回所有大於指定變量的元素,而不管它們之間是否存在間隙。 –