Sql 在数据库中选择数值相近的条目

Sql 在数据库中选择数值相近的条目,sql,ms-access,bioinformatics,Sql,Ms Access,Bioinformatics,假设我在MS Access数据库中有一个名为ABC的表 此表中有几列,但只有两列与此问题相关-Hugo_符号和Start_位置。Hugo_符号有基因名称,几行可以有相同的Hugo_符号-这意味着此列有重复的条目。起始位置有数字-从1000到100000000的任何数字 我想构建一个查询,返回表ABC中的行 我有相同的雨果女神符号和 2开始位置彼此之间的距离在20以内 例如,查询应该返回 Hugo_Symbol Start_Position TP53

假设我在MS Access数据库中有一个名为ABC的表

此表中有几列,但只有两列与此问题相关-Hugo_符号和Start_位置。Hugo_符号有基因名称,几行可以有相同的Hugo_符号-这意味着此列有重复的条目。起始位置有数字-从1000到100000000的任何数字

我想构建一个查询,返回表ABC中的行 我有相同的雨果女神符号和 2开始位置彼此之间的距离在20以内

例如,查询应该返回

Hugo_Symbol         Start_Position

TP53                      987654
TP53                      987660
TP53                      987662
APOB                      12345
APOB                      12350
APOB                      12359
因为这些线具有相同的雨果_符号,并且开始_位置彼此之间的距离在20以内


这样的质疑可能吗?如果是这样,SQL代码是什么?

我不使用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
编辑:

以上答案相互影响很大

如果您将要求改为所有记录,其中存在另一个具有相同符号的记录,并且一个位置具有其自身位置的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能做什么和不能做什么。

我不使用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
SELECT ABC.Hugo_Symbol, ABC.Start_Position, ABC_1.Start_Position
FROM ABC INNER JOIN ABC AS ABC_1 ON 
   ABC.Hugo_Symbol = ABC_1.Hugo_Symbol AND 
   ABC.Start_Position + 20 >= ABC_1.Start_Position AND
   ABC.Start_Position < ABC_1.Start_Position
编辑:

以上答案相互影响很大

如果您将要求改为所有记录,其中存在另一个具有相同符号的记录,并且一个位置具有其自身位置的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可以做什么和不能做什么。

开始位置在什么的20以内?传入值?还有其他行有相同的雨果标志吗?是否包括包含[APOB,12330]的行?那么[APOB,12325]呢?我们能得到一些起始数据吗?什么版本的Access?Access 2000。相距不到20英里。具有相同雨果_符号的任何其他行。是的,{APOB 12320}将被包括在内,因为它在{APOB 12345}的20范围内。与{APOB 12325}相同。'“开始数据”,如“@Shyam_LA”-您希望从表中获得这些结果的数据-这应该包括您希望不包括的行之类的内容。也就是说,汉斯说得有道理——你真的应该自己为此付出一些努力。我最初认为这可能需要一些OLAP功能,出于性能原因可能会更受欢迎,但这让我觉得我想得太多了…@HansUp:我同意你的观点,但除了OP的态度,我认为这是一个完全合理的问题。我编辑了这个问题,删除了OP对复制和粘贴代码的明确要求,因为我们当然不想鼓励这样做。开始位置在什么的20以内?传入值?还有其他行有相同的雨果标志吗?是否包括包含[APOB,12330]的行?那么[APOB,12325]呢?我们能得到一些起始数据吗?什么版本的Access?Access 2000。相距不到20英里。具有相同雨果_符号的任何其他行。是的,{APOB 12320}将被包括在内,因为它在{APOB 12345}的20范围内。与{APOB 12325}相同。'“开始数据”,如“@Shyam_LA”-您希望从表中获得这些结果的数据-这应该包括您希望不包括的行之类的内容。也就是说,汉斯说得有道理——你真的应该自己为此付出一些努力。我最初认为这可能需要一些OLAP功能,出于性能原因可能会更受欢迎,但这让我觉得我想得太多了…@HansUp:我同意你的观点,但除了OP的态度,我认为这是一个完全合理的问题。我编辑了这个问题,删除了OP对复制粘贴代码的明确要求,因为我们当然不想鼓励这样做。看起来@Dems比我做得更好。还有一个更具体的答案是boot。看起来@Dems击败了我。第二个代码工作得非常完美。给了我我想要的东西。。但是,有一个问题——我希望所有具有相同雨果标志的条目都列在一起。到目前为止,我的表有25000个条目,查询返回1200个条目,但由于缺少上述分组,因此很难理解它。它们可以自动分组吗?谢谢@shyam_LA:按数据添加订单。hugo_符号,data.start_位置第二个代码工作正常。给了我我想要的东西。。但是,有一个问题——我希望所有具有相同雨果标志的条目都列在一起。到目前为止,我的表有25000个条目,查询返回1200个条目,但由于缺少上述分组,因此很难理解它。它们可以自动分组吗?谢谢@shyam_LA:按data.hugo_符号、data.start_位置添加订单
SELECT ABC.Hugo_Symbol, ABC.Start_Position, ABC_1.Start_Position
FROM ABC INNER JOIN ABC AS ABC_1 ON 
   ABC.Hugo_Symbol = ABC_1.Hugo_Symbol AND 
   ABC.Start_Position + 20 >= ABC_1.Start_Position AND
   ABC.Start_Position < ABC_1.Start_Position