2012-01-23 11 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 

私のタスクは次のとおりです。

私は16-01-2012に初期化されdate変数を持っていると私は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:これは、間にギャップがあるかどうかに関係なく、指定された変数より大きいすべての要素を返します。 –