2016-03-24 1 views
1
Table1 
___________________ 
id Date 
1  2016/1/05 
2  2012/5/09 
3  2010/6/23 
4  2009/7/18 
5  2002/2/13 

特定の日付を使用してIDを返すSQLクエリを作成しようとしています。SQL Serverを使用して特定の日付の単一行を選択します。2014

日付がテーブルにない場合は、指定した日付に最も近い日付が返されます。

入力日付が2016年1月2日である場合、これは最も近い一致

あるのでそう....それは、入力された日付が2003年2月12日であれば、それは、ID 5

を返しますID 1を返します

答えて

4

----編集済み

「最も近い」番号を取得するために「abs」を使用します。

declare @t1 as table (id int,date datetime) 
insert into @t1 select 1,'2016/1/05' 
insert into @t1 select 2,'2012/5/09' 
insert into @t1 select 3,'2010/6/23' 
insert into @t1 select 4,'2009/7/18' 
insert into @t1 select 5,'2002/2/13' 

declare @inputDate datetime = '2003/2/12' 
select top 1.id from @t1 order by abs(datediff(dd,date,@inputDate)) 

set @inputDate = '2016/1/02' 
select top 1.id from @t1 order by abs(datediff(dd,date,@inputDate)) 
+0

が動作しませんwell.You 2つの日付を取得しなければならないとして、最も近い日付が1より大きいと1、大きくすることができますそれらの2つを比較して、どれが最も近いかを見てください。 –

+0

ああ、編集中です。 –

+0

完璧な作品です。ありがとうございます! –

0

あなたは、このような擬似コードの何かを試すことができます...

select id,date,min(days_cnt) 
(Select id , date,(date-input_date) as days_cnt from table) 
where days_cnt > 0 
関連する問題