select并删除基于旧条目的查询

我有一个使用ADO将数据推送到Access数据库的Excel工作表。 它基本上是把发票放入数据库。 有时我会修改我的发票,因此数据库将以相同的发票两次结束。 我需要进行一个select和删除查询,根据发票号find重复项,并删除较旧版本的发票(旧logging),下面是一个简单的例子:

    ID发票#总项目date戳
     1 1234 456.29 $ shoes 06/06/2016 03:51
     2 1234 78.58 $ boots 06/06/2016 03:51
     3 1234 22.74 $围巾06/06/2016 03:51
     4 1234 539.34 $鞋06/07/2016 12:44
     4 1234 66.24 $裤子06/07/2016 12:44

正如你所看到的,第4行和第5行是这个客户的新发票。 我想要删除相同发票编号的每个以前的订单。 请注意:它们实际上并不重复,只有发票号码是重复的 。 查询需要根据发票号码查看重复,并且标准可以看到比最近的date更早的date。

在那个时候,这远远超过了我。 我将不胜感激的帮助。

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

 DELETE * FROM InvoiceTable WHERE NOT datestamp IN (SELECT Max(datestamp) FROM InvoiceTable sub WHERE sub.InvoiceNumber = InvoiceTable.InvoiceNumber) 

正如我所说,尽量保守,不要删除。 而应根据给定发票号码的最大date标记来select行:

 SELECT invoices.id, invoices.invoice, invoices.total, invoices.item, invoices.datestamp FROM invoices INNER JOIN (SELECT id, MAX(datestamp) AS maxdate FROM invoices GROUP BY id) lastinv ON invoices.id = lastinv.id AND invoices.datestamp = lastinv.maxdate 

这是未经testing的代码,但应该,几乎做你想要的。 所有你需要做的就是把它打包成Microsoft Access,因为这是T-SQL。