首页 > 解决方案 > MS-Access:删除重复的行,但保留最新日期的行

问题描述

我是 SQL 和 MS-Access 的新手,可能需要一些帮助。我的表看起来像这样,我想删除所有行,其中C1C2C3相同的,但保留最新日期的行。在这种情况下,我想删除ID2 和 5 的行。

ID  |  C1  |  C2  |  C3  |  Date   |
1   |  a   |  a   |  b   | 01.04.20|
2   |  a   |  a   |  b   | 01.03.19|
3   |  a   |  b   |  b   | 01.04.20|
4   |  a   |  b   |  c   | 01.04.20|
5   |  a   |  b   |  c   | 07.05.19|

我试图用数字计算行,ROW_NUMBER OVER (PARTITION BY C1,C2,C3 ORDER BY Date ASC)这样我就可以删除所有行号> 1的行。但不幸PARTITION BY的是在 Access 中不起作用。

你有另一个想法我怎么能做到这一点?

以下查询为我提供了我想要的表。但我怎么能继续这样做呢?

SELECT C1,C2,C3, max(Date)
FROM Table
GROUP BY C1,C2,C3

谢谢您的帮助!

标签: sqlms-access

解决方案


在 MS Access 中,您可以使用:

select t.*
from t
where t.date = (select max(t2.date)
                from t as t2
                where t2.c1 = t.c1 and t2.c2 = t.c2 and t2.c3 = t.c3
               );

您可以删除具有类似逻辑的行:

delete from t
where t.date < (select max(t2.date)
                from t as t2
                where t2.c1 = t.c1 and t2.c2 = t.c2 and t2.c3 = t.c3
               );

推荐阅读