Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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 基于旧条目选择和删除查询_Sql_Excel_Vba_Ms Access - Fatal编程技术网

Sql 基于旧条目选择和删除查询

Sql 基于旧条目选择和删除查询,sql,excel,vba,ms-access,Sql,Excel,Vba,Ms Access,我有一个Excel工作表,它使用ADO将数据推送到Access数据库。它本质上是将发票放入数据库。有时我会修改我的发票,因此数据库将以相同的发票结束两次。我需要进行选择和删除查询,根据发票编号查找重复项,并删除发票旧记录的旧版本,例如: id invoice# total item datestamp 1 1234 456.29$ shoes 06/06/2016 03:51 2 1234 78.58$ boots 06/06

我有一个Excel工作表,它使用ADO将数据推送到Access数据库。它本质上是将发票放入数据库。有时我会修改我的发票,因此数据库将以相同的发票结束两次。我需要进行选择和删除查询,根据发票编号查找重复项,并删除发票旧记录的旧版本,例如:

id invoice# total item datestamp 1 1234 456.29$ shoes 06/06/2016 03:51 2 1234 78.58$ boots 06/06/2016 03:51 3 1234 22.74$ scarf 06/06/2016 03:51 4 1234 539.34$ shoes 06/07/2016 12:44 4 1234 66.24$ pants 06/07/2016 12:44 如您所见,第4行和第5行是我为该客户开具的新发票。我希望删除同一发票的所有以前订单。请注意:它们实际上不是重复的,只有发票号是重复的。查询需要根据发票号查看副本,条件查看日期早于最近日期的日期


在这一点上,我完全无法理解。非常感谢您的帮助。

考虑在WHERE子句中使用相关聚合子查询:

删除* 从发票 哪里没有邮戳 选择Maxdatestamp 来自发票子系统 其中sub.InvoiceNumber=InvoiceTable.InvoiceNumber
考虑在WHERE子句中使用相关聚合子查询:

删除* 从发票 哪里没有邮戳 选择Maxdatestamp 来自发票子系统 其中sub.InvoiceNumber=InvoiceTable.InvoiceNumber
正如我所说,试着保守一点,不要删除。而是选择基于给定发票号的最大日期戳的行:

选择 invoices.id、invoices.invoices、invoices.total、invoices.item、invoices.datestamp 从…起 发票 内连接 选择 id,MAXdatestamp作为maxdate 从…起 发票 分组 id lastinv ON invoices.id=lastinv.id和 invoices.datestamp=lastinv.maxdate
这是未经测试的代码,但应该可以做您想做的事情。你所要做的就是把它修改成Microsoft Access,因为这是T-SQL。

正如我所说的,尽量保守,不要删除。而是选择基于给定发票号的最大日期戳的行:

选择 invoices.id、invoices.invoices、invoices.total、invoices.item、invoices.datestamp 从…起 发票 内连接 选择 id,MAXdatestamp作为maxdate 从…起 发票 分组 id lastinv ON invoices.id=lastinv.id和 invoices.datestamp=lastinv.maxdate
这是未经测试的代码,但应该可以做您想做的事情。您所要做的就是将其转换为Microsoft Access,因为这是T-SQL。

我不得不说,您自己尝试一下是值得的。您已经明确定义了需要完成的任务,现在只需研究SQL命令即可完成任务。您需要一个Access查询来完成这项工作,很可能是在SQL视图中。也许这里的答案也不是破坏性的——你似乎对以前发生的事情有很好的审计线索。为什么不简单地根据日期选择最新的发票呢?我必须说,你自己尝试一下是值得的。您已经明确定义了需要完成的任务,现在只需研究SQL命令即可完成任务。您需要一个Access查询来完成这项工作,很可能是在SQL视图中。也许这里的答案也不是破坏性的——你似乎对以前发生的事情有很好的审计线索。为什么不简单地根据日期选择最新的发票呢?谢谢,我很感谢你的回答,但我仍然无法理解。我对访问一无所知。出于某种原因,我会在excel中发现这很简单,但不要这样做[我甚至不知道从何处开始访问。理想情况下,我甚至不希望它是一个基于VBA或SQl的解决方案,这似乎是您的答案,但只是在access designer中执行一个复杂的查找重复项查询,该查询显示重复项,但仅显示较新日期的重复项。/在我之外。我对访问一无所知。出于某种原因,我会在excel中发现这很简单,但不要[我甚至不知道从何处开始访问。理想情况下,我甚至不希望它是一个基于VBA或SQl的解决方案,这似乎是您的答案,但只是在access designer中执行一个复杂的查找重复项查询,显示重复项,但仅显示较新日期的重复项。/