我有一个数据库,其中表有以下字段
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
答案 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));