【问题标题】:How do I select *unique* duplicates in MS Access SQL code from one table?如何从一张表中选择 MS Access SQL 代码中的*唯一*重复项?
【发布时间】:2022-01-20 17:44:04
【问题描述】:

我正在尝试使用 SQL 来选择唯一重复的服务日期,所有记录都包含在一个表中。这是一个示例起始表:

GroupID ServiceID ServiceDate
A X 1/1/2010
A Y 1/1/2010
A Z 10/1/2010

我已经想出了如何找到 2 条具有相同日期的不同记录并将它们放在一行中,但我最终得到了一个有些重复的表,因为它将每条记录与所有其他记录进行比较:

GroupID ServiceID1 ServiceDate1 ServiceID2 ServiceDate2
A X 1/1/2010 Y 1/1/2010
A Y 1/1/2010 X 1/1/2010

我不想要最后一行,因为它本质上是第一行的副本。

关于如何摆脱第二行的任何想法?

这是一些复制代码(这是我的 SQL Fiddle:http://sqlfiddle.com/#!9/537d84

CREATE TABLE MyTable (
  GroupID varchar(255),
  ServiceID varchar(255),
  ServiceDate Date
);

INSERT INTO MyTable (GroupID, ServiceID, ServiceDate)
VALUES ("A", "X", '2010-01-01'),
      ("A", "Y", '2010-01-01'),
      ("A", "Z", '2010-10-01');

SELECT DISTINCT 
  c1.ServiceID AS ServiceID1, c1.ServiceDate AS ServiceDate1, 
  c2.ServiceID AS ServiceID2, c2.ServiceDate AS ServiceDate2
FROM MyTable c1 INNER JOIN MyTable c2 
ON c1.GroupID = c2.GroupID 
WHERE (c1.ServiceID <> c2.ServiceID AND c1.ServiceDate = c2.ServiceDate);

注意:我认为我可以创建 A-B 和 B-A 组合 ID 变量,然后对它们进行 SELECT DISTINCT。不幸的是,这是一个比 MS Access 稍差的 SQL 版本(从技术上讲,我使用 Microsoft.ACE.OLEDB.12.0 连接字符串在 VBA 中编写它),所以没有 CONCAT 函数,也没有 CASE WHEN子句,以及语法效率方面的其他缺陷。

关于如何摆脱第二行的任何想法?

【问题讨论】:

    标签: sql ms-access select duplicates ms-access-2010


    【解决方案1】:

    我附上了三张图片。

    一个显示查询设计 第二个显示查询输出 第三个显示表数据(没有任何查询)

    【讨论】:

      【解决方案2】:

      由于您使用的是&lt;&gt; 条件,您总是会得到重复的结果(x-y 和 y-x)。除了使用&lt;&gt;,您可以任意决定较小的ServiceId 应始终位于c1 中:

      SELECT DISTINCT 
        c1.ServiceID AS ServiceID1, c1.ServiceDate AS ServiceDate1, 
        c2.ServiceID AS ServiceID2, c2.ServiceDate AS ServiceDate2
      FROM MyTable c1 INNER JOIN MyTable c2 
      ON c1.GroupID = c2.GroupID 
      WHERE (c1.ServiceID < c2.ServiceID AND c1.ServiceDate = c2.ServiceDate); 
      -- Here ------------^
      

      【讨论】:

      • 有趣的想法。我还没有机会尝试,但你知道“
      • @AlexSilverman &lt; 适用于任何可以排序的类型,包括数字(显然)、字符串和日期。 “a 'Alex' < 'Silverman' 将返回 true
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      相关资源
      最近更新 更多