2017-10-23 4 views
0

私は作成日の列を持つテーブルを持っています。とにかく、特定の日付の前後に日付を作成し、内側のクエリと結合のない1つのselect文で正確なtow行を選択するにはどうしますか?特定の日付を作成する前後のトウ行を選択

Id - date 
1 - 1/1/2013 
2 - 2/1/2013 
3 - 6/1/2013 
4 - 9/2/2014 

2013年4月1日の場合、結果は次のとおりです。

2 - 2/1/2013 
3 - 6/1/2013 
+1

少なくとも、いくつかのサンプルデータと期待される結果を示します。 –

+0

トウの列は何ですか? –

+1

dbスキーマ、サンプルデータ、現在および予想される出力を表示します。 \t [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [**スタート**] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を改善し、より良い回答を得る方法を学ぶことができます。 (http://stackoverflow.com/help/mcve) \tがhttp://rextester.com –

答えて

0

あなたはrow_number()を使用することができます。

select t.* 
from (select t.*, 
      row_number() over (partition by sign(date - date '2013-04-01') 
           order by abs(date - date '2013-04-01') as seqnum 
           ) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

これは3行を返すことができます - 日付が正確に一致した場合。私はこれをフィーチャーと見なしています。なぜなら、その場合に何をすべきかを指定していないからです。

オラクル12Cでは、あなたが行うことができます:

select t.* 
from t 
order by row_number() over (partition by sign(date - date '2013-04-01') 
          order by abs(date - date '2013-04-01') 
          ) 
fetch first 2 rows only; 

注:日付のいずれかが入ってくるの日付と一致した場合、結果は(3可能な日数の間で)不定です。

関連する問題