Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL不在MS ACCESS/VBA上的查询中_Sql_Vba_Ms Access - Fatal编程技术网

SQL不在MS ACCESS/VBA上的查询中

SQL不在MS ACCESS/VBA上的查询中,sql,vba,ms-access,Sql,Vba,Ms Access,我有下面的课程表,有不同的摘录日期 ID | Course | ExtractDate 10 | 100000 | 2017-02-28 10 | 100001 | 2017-01-31 10 | 100002 | 2016-12-31 10 | 100003 | 2016-11-30 我需要执行以下SQL脚本,只保留最近3个月的记录,从而删除课程代码为10003的记录 Delete from [Course] where [ExtractDate] not in (select distin

我有下面的课程表,有不同的摘录日期

ID | Course | ExtractDate
10 | 100000 | 2017-02-28
10 | 100001 | 2017-01-31
10 | 100002 | 2016-12-31
10 | 100003 | 2016-11-30
我需要执行以下SQL脚本,只保留最近3个月的记录,从而删除课程代码为10003的记录

Delete from [Course] where [ExtractDate] not in (select distinct top 3 [ExtractDate] from [Course] order by [ExtractDate] desc
似乎VBA或MS Access不支持不在的功能,有人对此有解决办法吗


谢谢。

不在与目标为空的左连接相同,因此没有连接

所以

from [Course]
left join (
   select distinct top 3 [ExtractDate] 
   from [Course] 
   order by [ExtractDate] desc
) as x on [ExtractDate] = x.[ExtractDate]
where x.[ExtractDate] is null

但是,我并不声称您的任何代码都是正确的,只是这两个代码在SQL中是相同的。

如果您想要三个月以上的记录:

Delete from [Course]
    where [ExtractDate] < dateadd("m", -3, date());

不需要基于集合的操作。

这真的是过去3个月吗?您可以只删除日期较旧的记录。那也会更快。看一看dateadd函数提示,一个负值将减去Access SQL不在的值。您的问题是,您使用distinct和top组合,这是根据Access SQL不允许的:事实上,我以前尝试过以下两种方法,但它们都不起作用。1从[Course]中删除,其中DateAdd'm',3,ExtractDate3 ACCESS希望您将Delete*从中写入…我怀疑*将对MS ACCESS产生任何影响。如果是select语句,这将起作用。但是我需要删除那些符合条件的记录。我只是尝试了一下,它似乎不起作用。不需要的记录不会被删除。不过,它在SQL server上运行良好。我在想是不是MS ACCESS 2016不支持DATEADD/DATEDIFF函数。@user1688194。dateadd肯定在MS Access中。哦,不,我犯了一个愚蠢的错误,导致记录无法删除。它现在已经开始工作了。非常感谢。
Delete from [Course]
    where [ExtractDate] < dateadd("m", -3, date());