admin

选择数据库中数字上彼此接近的条目

sql

可以说我在MS-Access数据库中有一个称为ABC的表。

该表中有几列,但此问题仅涉及两列-“ Hugo_symbol”和“ Start_position”。“
Hugo_Symbol”具有基因名称,几行可以具有相同的Hugo_symbol-意味着此列具有重复的条目。“开始位置”具有数字-
介于1000到100000000之间的任何数字。

我想建立一个查询,该查询返回表ABC中的行:1)具有相同的Hugo_Symbol和2)Start_position彼此之间在20之内。

例如,查询应返回,

Hugo_Symbol         Start_Position

TP53                      987654
TP53                      987660
TP53                      987662
APOB                      12345
APOB                      12350
APOB                      12359

因为这些行具有相同的Hugo_Symbol,并且Start_Position彼此之间的距离在20以内。

这样的查询可能吗?如果是这样,那么SQL代码将是什么?


阅读 219

收藏
2021-07-01

共1个答案

admin

我不使用Access,但是这就是我使用ANSI SQL处理它的方式。

SELECT
  *
FROM
  ABC    AS first
INNER JOIN
  ABC    AS second
    ON  second.Hugo_Symbol     = first.Hugo_Symbol
    AND second.Start_Position <= first.Start_Position + 20
    AND second.Start_Position >  first.Start_Position

这可能会返回您期望的更多数据,并可能返回期望的其他格式。

First.Hugo_Symbol First.Start_Position Second.Hugo_Symbol Second.Start_Position
     TP53              987654                TP53              987660
     TP53              987654                TP53              987662
     TP53              987660                TP53              987662
     APOB              12345                 APOB              12350
     APOB              12350                 APOB              12359
     APOB              12350                 APOB              12359

编辑:

上面的答案对“每个其他”都有很大的影响。

如果将需求重新定义为“所有其他记录,其中另一个记录存在相同的符号,并且该位置具有其自己的位置的20个位置”,则您可能会得到类似…的信息。

SELECT
  *
FROM
  ABC     AS data
WHERE
  EXISTS (SELECT *
            FROM ABC AS lookup
           WHERE lookup.hugo_symbol     = data.hugo_symbol
             AND lookup.start_position >= data.start_position - 20
             AND lookup.start_position <= data.start_position + 20
             AND lookup.start_position <> data.start_position
         )

但是Access2000受到我通常使用的数据库的限制。我不知道Access2000可以做什么和不能做什么。

2021-07-01