2016-03-24 44 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 

試圖編寫一個SQL查詢,該查詢使用給定日期返回一個id。使用SQL Server 2014選擇具有給定日期的單行

如果日期不在表中,它應該返回給定日期的最近日期。

所以....如果輸入的日期是2016年1月2日,它將返回id爲1,因爲這是最接近的匹配

如果輸入的日期是2003年2月12日,它將返回ID 5

回答

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就一定得兩個日期,日期一個更大和一個較小,然後比較這兩個看哪個是最接近的。 –

+0

哦是的,編輯.. –

+0

作品完美....謝謝你! –

0

你可以嘗試僞代碼這樣的事情...

select id,date,min(days_cnt) 
(Select id , date,(date-input_date) as days_cnt from table) 
where days_cnt > 0 
相關問題