Sql Server最接近(今后)到今天的行

时间:2011-05-17 11:44:40

标签: sql sql-server datetime

我有一个表,其中包含带有startdate(日期时间)的项目的历史记录 - 它应该只允许一个项目与日期相对应。有一个验证程序将采用日期并返回代码(成功/失败原因代码)以及最接近今天的“下一个”历史项目。

如果这是表格数据(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项'。日期也是有效的,但是有一个记录,然后是新的日期,但是比今天晚。

1 个答案:

答案 0 :(得分:1)

您可以将检查基于下一个查询:

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

第一个条款检查未来的开始日期,第二个条款为开始日期之前或与您提供的开始日期相同。

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