2011-05-17 89 views
2

我有一个包含startdate(日期时间)的项目历史记录的表 - 它应该只允许一个日期对应一个项目。有一个验证过程将采用一个日期并返回一个代码(成功/失败原因代码)以及最接近今天的'下一个'历史项目。Sql Server获取最近(未来)到今天的行

如果这是表数据(ID日期标题):

1 16/05/2010 'item 1' 
2 17/05/2010 'item 2' 
3 20/05/2010 'item 3' 

我想验证一个条目:

exec Validate '18/05/2010' 'item 4' 

将返回我: '项目4',因为该条目是有效的,虽然数据没有被提交,但是它将我的新条目作为下一个可用条目返回,因为它距离今天最近(将来)。

exec Validate '24/05/2010' 'item 5' 

应返回我: '项目3'。日期也是有效的,但有一个记录,然后是新的日期,但晚于今天。

+0

你能再次解释项目的东西吗?为什么项目4在有更晚的日期(对于项目3)时没有匹配,但是项目5从项目3行获取数据时,此行在“之前” – gbn 2011-05-17 11:56:22

+0

此刻,这只是一个验证例程,没有任何内容被提交给数据库 - 项目4在测试'项目5'时不会存在于表格中。所以proc应该会返回我更接近明天的日期(也许这是更好的方式来描述它) - 一排,或者我通过的任何东西。 – 2011-05-17 12:29:13

回答

1

也许你可以基于一个查询你的检查:

select min(startdate) 
from itemstable 
where datediff(d, getdate(), startdate)>0 
    and datediff(d, startdate, @datetocheck)>=0 

第一条检查未来startdates,为startdates第二句话之前或作为您提供一个相同的。

(这可能是一些比较是错误的 - 总是发生日期问题:))

+0

有帮助,谢谢。我认为我有一些工作,但不是很优雅(基于进一步的连接返回你的想法的结果,或者只是选择传递给proc的值)。 – 2011-05-17 13:55:55