插入上个月的缺失天数

时间:2018-11-29 14:28:20

标签: sql ms-access

我编写了一个查询(从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(如果有什么用)。

1 个答案:

答案 0 :(得分:1)

WHERE (MONTH(a1.BalDate) >= MONTH(a1.BalDate) - 1)

这毫无意义-永远都是真的。

您需要比较一个固定的日期。 Date()返回当前日期,DateAdd()用于减去一个月。

WHERE (a1.BalDate >= DateAdd("m", -1, Date()))

附录:

如果仍然运行缓慢,则在列BalDate上添加索引应该会有所帮助。通过将列值(而不是根据该值的计算)与固定表达式进行比较,Access可以利用索引。