Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
MS Access SQL查询表并删除重复项_Sql_Ms Access - Fatal编程技术网

MS Access SQL查询表并删除重复项

MS Access SQL查询表并删除重复项,sql,ms-access,Sql,Ms Access,我在这里查阅了好几篇文章,没有找到答案,但问题和答案可能比我的工资等级高了一点 我有一个MSAccess表,其中有两个ID字段ID1和ID2,以及许多其他列 我想查询SELECT语句表,需要做两件事。不确定订单是否重要。我希望查询返回表中的所有列 ID1没有副本,我根本不在乎哪些记录会被丢弃。 ID2没有重复项,我希望保留表中日期字段早于具有相同ID2值的记录的其他值的记录。 只是不知道如何使用SQL Select语句来实现这一点 示例数据-假设DateFld自上而下为ASC ID1 ID

我在这里查阅了好几篇文章,没有找到答案,但问题和答案可能比我的工资等级高了一点

我有一个MSAccess表,其中有两个ID字段ID1和ID2,以及许多其他列

我想查询SELECT语句表,需要做两件事。不确定订单是否重要。我希望查询返回表中的所有列

ID1没有副本,我根本不在乎哪些记录会被丢弃。 ID2没有重复项,我希望保留表中日期字段早于具有相同ID2值的记录的其他值的记录。 只是不知道如何使用SQL Select语句来实现这一点

示例数据-假设DateFld自上而下为ASC

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  ...