VBA SQL:访问数据库中的下一条记录

时间:2011-11-03 09:12:16

标签: sql vba

我有一个数据库,其中表有以下字段

ID, Date,Field1,Field2,Field3, Field4

此处没有字段是唯一的,但ID和日期的组合将是唯一的。

对于ID和Date的给定组合,我想访问表中的下一条记录。对于任何给定的ID,该表按时间顺序排列 - 但要记住的一件事是,只有那些日期是工作日(或假期),所以简单的dateadd将不起作用。

我一直在使用此代码库

SELECT D1.Field4 FROM 
    (T1 
     INNER Join T1 As D1 
     ON D1.ID= T1.ID 
     AND D1.Date = DateAdd('d',10,T1.Date)
    )
  WHERE T1.Date = #1/7/2010# AND T1.ID =9;

这是一个简单的dateadd上的内部联接,但是当中间有假期时,这不会按照我想要的方式工作

请告知。

Soham

2 个答案:

答案 0 :(得分:0)

您可以根据输入查找下一个,而不是查找特定的输入。只需查找匹配的ID与当前日期之后的日期,然后排在第一位。

例如:

select top 1
    t1.*,
    interval = datediff(dd, #1/7/2010#, t1.date)
from
    t1
where t1.id = 9 and t1.date > #1/7/2010#
order by t1.date

答案 1 :(得分:0)

我会考虑创建一个带有ID和ValidDate列的新表,该列跟踪存在的所有有效日期(不包括周末和假日等)。然后,我将使用ValidDates表中的ID列加入该表上的数据表,作为结果集的范围,以便您可以根据上述评论返回接下来几天的任意数量。

如果你想看一些代码,请告诉我,我可以把它们放在一起。

更新,我实际上并没有这样做,但是这样的事情对你有用。

SELECT D1.Field4 
FROM T1 INNER Join T1 As D1 
ON D1.ID= T1.ID 
WHERE T1.Date > #1/7/2010# AND T1.ID =9
AND D1.Date IN    
(SELECT ValidDate
FROM ValidDates
WHERE ValidDate BETWEEN T1.Date AND DateAdd('d',10,T1.Date));