我编写了一个查询(从here获得帮助),该查询在我的数据中查找并插入了所有缺少的日期(假日和周末)。
但是,在运行一次并意识到我可能需要每周运行一次之后,我试图使其仅在日期等于一个月前的时候插入(所以,我只是希望它从上个月开始插入到当前)。
这是我现在要查询的内容:
INSERT INTO Archive ( [Customer Name], IDNbr, City, Balance, aNbr, BalDate )
SELECT a1.[Customer Name], a1.IDNbr, a1.City, a1.[Balance], a1.aNbr, a1.BalDate+3
FROM Archive AS a1
INNER JOIN Archive AS a2 ON (a1.IDNbr=a2.IDNbr) AND (a1.aNbr=a2.aNbr) AND (a1.BalDate+4=a2.BalDate)
WHERE NOT EXISTS
(
SELECT *
FROM Archive a3
WHERE a3.IDNbr = a1.IDNbr AND a3.BalDate = a1.BalDate + 3) AND (DatePart("w", a1.BalDate) = 6
) AND (MONTH(a1.BalDate) >= MONTH(a1.BalDate) - 1)
我目前没有任何错误。但是,这似乎需要9个小时以上才能完成,而没有完成任何工作。
问题:
如何更改查询以仅回溯一个月(或4周)?
正如我目前所看到的,它可以追溯到表格的完整开头(该日期每天追溯两年)。
尽管我不确定如何实现它们,但我已经研究了DateAdd()
和DateDiff()
。我的日期格式是:mmddyyyy
(如果有什么用)。
答案 0 :(得分:1)
WHERE (MONTH(a1.BalDate) >= MONTH(a1.BalDate) - 1)
这毫无意义-永远都是真的。
您需要比较一个固定的日期。 Date()
返回当前日期,DateAdd()
用于减去一个月。
WHERE (a1.BalDate >= DateAdd("m", -1, Date()))
附录:
如果仍然运行缓慢,则在列BalDate
上添加索引应该会有所帮助。通过将列值(而不是根据该值的计算)与固定表达式进行比较,Access可以利用索引。