2012-09-11 30 views
1

假設我在MS-Access數據庫中有一個名爲ABC的表。選擇數據庫中數值上彼此接近的條目

該表中有幾列,但這個問題只有兩列感興趣 - 「Hugo_symbol」和「Start_position」。 「Hugo_Symbol」具有基因名稱,並且多行可以具有相同的Hugo_symbol--意味着該列具有重複的條目。 「START_POSITION」有號碼 - 什麼從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代碼會是什麼?

+0

'Start_Position'在_what_?傳入價值?任何其他行(具有相同的「Hugo_Symbol」)?會包含['APOB','12330']的行嗎?那麼['APOB','12325']呢?我們可以得到一些_starting_數據嗎?什麼版本的Access? –

+0

訪問2000.在「彼此」的20以內。任何其他具有相同Hugo_Symbol的行。是的,{APOB 12320}將包含在內,因爲它在{APOB 12345}的20以內。與{APOB 12325}相同..'正在啓動數據',如? –

+0

@Shyam_LA - 你希望得到這些結果的表中的數據 - 這應該包括像你期望的行**不包括**。那就是說,漢斯有一點 - 你真的應該自己做一些努力。我最初認爲這可能需要一些OLAP功能(並可能因性能原因而優先選擇),但它打我,我想這太難了...... –

回答

3

我不使用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可以做什麼,也不能做什麼。

+0

第二個代碼完美工作。給我的是我正在尋找的東西..但是,有一個問題 - 我想要將所有具有相同Hugo_Symbol的條目一起列出。我的表格有25000個條目,截至目前,查詢返回1200個條目,但由於缺少所述分組而難以理解它。他們可以自動分組嗎?謝謝! –

+0

@shyam_LA:添加'ORDER BY data.hugo_symbol,data.start_position' – MatBailie

+0

完美!非常感謝你.. –

2
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 
+0

看起來@Dems打敗了我。並有一個更富有啓發的答案。 – mwolfe02

+0

是的,他的代碼有訣竅!謝謝.. –