Access 2016 SQL:查找不同表的两列之间的最小绝对差

Posted

技术标签:

【中文标题】Access 2016 SQL:查找不同表的两列之间的最小绝对差【英文标题】:Access 2016 SQL: Find minimum absolute difference between two columns of different tables 【发布时间】:2017-07-14 15:21:25 【问题描述】:

我还没有弄清楚如何将这个 SQL 字符串组合在一起。如果有人可以帮助我,我将不胜感激。我使用的是 Access 2016,因此请仅提供适用于 Access 的答案。我有两个查询,除了一个共同的字段外,它们都有不同的字段。我需要找到两个相似列之间的最小绝对差。然后,我需要能够从相应的记录中提取数据。例如,

qry1.Col1  |  qry1.Col2
-----------|-----------
10245.123  | Have
302044.31  | A

qry2.Col1 | qry2.Col2
----------------------
23451.321 | Great
345622.34 | Day

在第三个查询 qry3 中找到最小绝对差。例如,Min(Abs(qry1!Col1 - qry2!Col1) 我想它会为 qry1.Col1 中的每个值生成这些表之一。对于值 10245.123,

qry3.Col1
----------
13206.198
335377.217

由于 13206.198 是最小绝对差,我想从 qry2 中提取与该记录相对应的记录,并将其与 qry1 中的数据相关联(我假设这使用了 JOIN)。导致第四个这样的查询,

qry4.Col1 (qry1.Col1) | qry4.Col2 (qry1.Col2) | qry4.Col3 (qry2.Col2)
----------------------------------------------------------------------
10245.123             | Have                  | Great
302044.31             | A                     | Day

如果这一切都可以在一个 SQL 字符串中实现,那就太好了。如果需要几个步骤,那也没关系。我只是想避免在 VBA 中使用循环和 RecordSet.Findfirst 来耗费时间。

【问题讨论】:

【参考方案1】:

您可以使用相关子查询:

select q1.*,
       (select top 1 q2.col2
        from qry2 as q2
        order by abs(q2.col1 - q1.col1), q2.col2
       ) as qry2_col2
from qry1 as q1;

【讨论】:

谢谢。有没有办法在同一记录中选择多列数据作为前 1? 啊,我知道我可以为其他字段添加额外的选择顶部子查询。但是,当我这样做时,Access 会告诉我“最多可以从此子查询中选择一条记录。” @Josh 。 . . MS Access 确实做到了TOP WITH TIES。您可以通过在 ORDER BY 中包含一个唯一键作为最后一个键来解决此问题。 什么是组合来自两个表(技术上是一个表和一个查询)的数据的最佳方法,其中我必须匹配表中 3 列 [userID、ACounter 和 Min(Abs( time2-time1))] 然后从表中选择(或连接)关联数据(比如 lat、long、alt)到一个查询行中?然后在同一查询记录上,再次执行此操作,但使用不同的用户 ID。本质上,这是编写一个数据查询,显示发送的用户 ID 和接收的用户 ID,并在一条记录中显示两者的位置信息。

以上是关于Access 2016 SQL:查找不同表的两列之间的最小绝对差的主要内容,如果未能解决你的问题,请参考以下文章

比较来自两个不同表的两列的逗号分隔值

如何比较不同数据库中不同表的两列?

验证两个不同表的两列完全匹配

在 PySpark 的两个不同 pyspark.sql.dataframes 中的两列中创建一个 pyspark.sql.dataframe

连接来自两个不同表的两列

比较两个excel的两列并返回第三列