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