MS Access SQL查询表并删除重复项
我在这里查阅了好几篇文章,没有找到答案,但问题和答案可能比我的工资等级高了一点 我有一个MSAccess表,其中有两个ID字段ID1和ID2,以及许多其他列 我想查询SELECT语句表,需要做两件事。不确定订单是否重要。我希望查询返回表中的所有列 ID1没有副本,我根本不在乎哪些记录会被丢弃。 ID2没有重复项,我希望保留表中日期字段早于具有相同ID2值的记录的其他值的记录。 只是不知道如何使用SQL Select语句来实现这一点 示例数据-假设DateFld自上而下为ASCMS Access SQL查询表并删除重复项,sql,ms-access,Sql,Ms Access,我在这里查阅了好几篇文章,没有找到答案,但问题和答案可能比我的工资等级高了一点 我有一个MSAccess表,其中有两个ID字段ID1和ID2,以及许多其他列 我想查询SELECT语句表,需要做两件事。不确定订单是否重要。我希望查询返回表中的所有列 ID1没有副本,我根本不在乎哪些记录会被丢弃。 ID2没有重复项,我希望保留表中日期字段早于具有相同ID2值的记录的其他值的记录。 只是不知道如何使用SQL Select语句来实现这一点 示例数据-假设DateFld自上而下为ASC ID1 ID
ID1 ID2 DateFld ...
1 24
1 24
2 23
3 98
4 23
4 23
5 98
6 72
保留第1、3、4、8行
没有索引,因为此表是通过make table查询创建的;但我可以加上它们。如果你需要更多,请告诉我
SELECT
ID1,
ID2,
[allOtherColumns]
FROM(
SELECT
ID1,
ID2,
ROW_NUMBER() OVER (PARTITION BY ID1 ORDER BY ID1) AS ID1Selector,
ROW_NUMBER() OVER (PARTITION BY ID2 ORDER BY DateValue ASC) AS ID2Selector,
[allOtherColumns)
FROM tbl) AS InnerQry
WHERE ID1Selector=1 AND ID2Selector=1
注意,这是可能在Access中工作的SQL Server代码。我在Access方面没有很多经验,但我知道SQL。在SQL中,ROW_NUMBER窗口函数将ID1拆分为唯一的ID1,因此它遇到的第一个ID1将是它唯一选择的ID1,ID2Selector将把行号1指定给它在每个ID2中遇到的最早日期值
可能有一种更有效的方法来执行此操作,但这就是我在SQL中始终执行此操作的方式。对于此示例数据,您可以使用的数据不存在:
样本数据和预期结果将有所帮助。也就是说,我怀疑你无法在MS Access中轻松完成你想做的事情,除非你的数据有其他你没有描述的约束。是的,需要示例。如果数据如下:1,2 1-必须消除其中一个,因为ID2是重复的?复制到底是什么意思?所有字段的值都相同?ID1和ID2是唯一的复合索引吗?是否存在唯一标识符(如autonumber)?在每个ID1的示例数据中,只有1个ID2,尽管在多行中。这是巧合还是这条规则适用于你的桌子?每个ID2也可能有重复的DateFld?ID2和DateFld对于ID1的所有唯一值都是相同的;如上面ID2所示。谢谢Tyler H,但Access中不支持行号。
SELECT t.*
FROM tablename AS t
WHERE NOT EXISTS (
SELECT 1 FROM tablename
WHERE ID2 = t.ID2 AND DateFld < t.DateFld
)
ID1 ID2 DateFld
1 24 ...
2 23 ...
3 98 ...
6 72 ...