2016-05-13 26 views
1

我在MS Access中擁有下表。選擇最接近給定值的兩行

Day ABC 
 
365  25 
 
548  35 
 
730  37 
 
913  58 
 
1095 146

我想查詢它這樣,我之前和列日的給定值後得到的行。這個值是可變的,可以是例如value = 432 對於此示例,查詢將生成下表。

Day ABC 
 
365  25 
 
548  35

因爲給定值= 432比548的

日值我能夠做到的就是讓一個場超過365天值較大和較小的,但不是兩個。以下查詢爲我提供了Day字段的正確行。

Select Max(Day) As Day From Table Where Day < 432 
    UNION 
    Select Min(Day) As Day From Table Where Day > 432 

當我使用此代碼並添加另一個字段,如ABC我得到一個錯誤。

您試圖執行一個查詢,該查詢不包含指定的 表達式'ABC'作爲聚合函數的一部分。

你能幫幫我嗎?我認爲這應該是一個非常簡單的任務。謝謝!

回答

1

你的SQL有幾個問題。由於您沒有將GROUP BY ABC子句添加到兩個SELECT語句中,因此會出現錯誤消息。
由於MAX(DAY) as DAY,您還會得到一個循環參考 - 您需要將as Day更改爲as lDay
你可能會(我)得到一個錯誤語法錯誤調用它Table - 很確定這是一個保留字。

也許這查詢將更好的工作:

Select Top 1 Day, ABC From Table3 Where Day <= 913 ORDER BY Day Desc 
UNION ALL 
Select Top 1 Day, ABC From Table3 Where Day >= 913 ORDER BY Day Asc 
+0

嗨,謝謝你的答案!但是,這總是會給我表格的第一行(不管值)和其他行。對於745的值,我想獲得730和913行,而不是365和其他行 – jonas778

+0

你絕對正確 - 我的歉意。將'ORDER BY Day Desc'添加到第一個'SELECT'語句的末尾和'ORDER BY Day Asc'到第二個語句的末尾。另外,如果你選擇一個確切的值;說913它會返回一個值,因爲'UNION'自動刪除重複項,返回兩行(這兩個都是相同的)使用'UNION ALL'。我會更新我的答案以顯示Asc和Desc排序。 –

+0

該錯誤與單詞Table沒有任何關係,我只是用它來說明這個例子。實際的表格命名不同 – jonas778

0

你也可以是一個小票友:

Select Top 2 Day, ABC From Table3 Order By Abs(Day - 432) Desc 

注意請,那結果將匹配問題的標題,不必然你的詳細解釋...